RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [javascript] 請教 node.js 及 socket.io 存取 mysql 資料庫同步、非同步問題   字型大小:||| 
daidai
鐵驢友〔中級〕
等級: 5等級: 5


 . 積分: 51
 . 文章: 80
 . 收花: 325 支
 . 送花: 166 支
 . 比例: 0.51
 . 在線: 1631 小時
 . 瀏覽: 13352 頁
 . 註冊: 7116
 . 失蹤: 609
#1 : 2013-7-21 08:35 PM     全部回覆 引言回覆

請教有使用過 node.js 存取 mysql 的版友,同步及非同步問題

最近公司主管挖了個洞給我跳,要我做遊戲伺服器,在上位的主管認為不過就是個聊天室,但是沒想到底層協定的應用及遊戲客戶端同步接收訊息的問題,單機版的遊戲已經出貨出去,還跟客戶承諾後續會更新成連線版。小弟我的本職是網頁程式設計師,用PHP設計公司網頁及系統,找遍了 google 相關文章,實在想不出問題點在哪,所以特來請教大家一些觀念

我用 node.js 及 socket.io(支援多種協定及現成的 room 及廣播機制) 實做聊天室訊息推播架構,想把這個應用在遊戲伺服器的同步訊息收發,使用 websocket 協定,在做連線驗證機制時,碰到了難題,
以下的函式都沒回傳值,我大概知道是同步、非同步問題,也嘗試使用 https://github.com/caolan/async (async.js) 這個套件,不過始終實做不出來,麻煩大家了,感謝

function auth(username)
{
        // 引入 mysql connect
        var config = require("./mysql_db.js");
        var db_connection = config.db;

        db_connection.query("SELECT * FROM `zp_machine` LEFT JOIN `zp_customer` ON `zpm_zpc_id` = `zpc_id` WHERE `zpm_sn` =?",[username], function(err, rows, fields) {
            if(err){
                console.log(err);
                return ;
            }
                        if (rows.length)
                        {
                                console.log('認證成功');
                                return true;
                        }
                        else
                        {
                                console.log('認證失敗');
                                return false;
                        }
        });
}

if (auth(username)) <==不會為 true
{
    //do........
}

最近為了完成這個專案,沒眠沒夜的在看資料還有 try code ,忽略了結婚不到一年的老婆(一直被唸說假日不帶她出門),再加上與我家人相處的小問題,她在近日提出離婚,我也回答尊重她的想法,她又要求我暫時不要給家人知道,只好順便附上這小段牢騷,哀...這麼努力是為了誰...還不是為了撐住這個家

[daidai 在  2013-7-22 09:18 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
daidai
鐵驢友〔中級〕
等級: 5等級: 5


 . 積分: 51
 . 文章: 80
 . 收花: 325 支
 . 送花: 166 支
 . 比例: 0.51
 . 在線: 1631 小時
 . 瀏覽: 13352 頁
 . 註冊: 7116
 . 失蹤: 609
#2 : 2013-7-23 01:07 AM     全部回覆 引言回覆

此段為 callback function
function(err, rows, fields) {
            if(err){
                console.log(err);
                return ;
            }
                        if (rows.length)
                        {
                                console.log('認證成功');
                                return true;
                        }
                        else
                        {
                                console.log('認證失敗');
                                return false;
                        }
        }

相關說明Node.js 台灣社群協作電子書



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
daidai
鐵驢友〔中級〕
等級: 5等級: 5


 . 積分: 51
 . 文章: 80
 . 收花: 325 支
 . 送花: 166 支
 . 比例: 0.51
 . 在線: 1631 小時
 . 瀏覽: 13352 頁
 . 註冊: 7116
 . 失蹤: 609
#3 : 2013-8-2 03:51 PM     全部回覆 引言回覆


引用:
ash11tw寫到:
nodejs基本上都是async的
所有東西都要在callback裡面跑

db_connection.query("SELECT * FROM `zp_machine` LEFT JOIN `zp_customer` ON `zpm_zpc_id` = `zpc_id` WHERE `zpm_sn` =?",[username], function(err, rows, fields) {
           //callback通常會回傳兩個值
          //第一個通常是error
          //所以一開始會檢測這個
            if(err){
                console.log(err);
                return ;
            }
           //接下來是從mysql取出來的值
                        if (rows.length)
                        {
                                console.log('認證成功');
                                return true;
                        }
                        else
                        {
                                console.log('認證失敗');
                                return false;
                        }
                      假如你有接下來認證的code要寫在這裡
                     if (auth(username)) <==不會為 true
                     {
                         //do........
                     }
        });

基本上 nodejs is an event driven structure so every result is passed to callback function for  next step


謝謝你的回應,不過我暫時不會想去試了~等我整理好心情和房間內舒適的辦公桌椅...
老婆目前已經成前妻,工作部份我也遞辭呈了,該是換個新環境了



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-4-27 07:27 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.022385 second(s), 7 queries , Qzip disabled