2013-08-04 56 views
0

讓我澄清一下,這有點複雜。 我正在實現一個表單在數據庫中插入數據。同一客戶端上的多個websockets連接 - 服務器無法處理

我在同一個客戶端有兩個websockets連接,連接在同一個nodejs服務器上。

用戶在表單的「名稱」文本字段上插入名稱後觸發一個連接。將數據發送到服務器,服務器檢查數據庫名稱是否已經存在,並回應「這已經存在,可能你插入了已經存在的東西」。

如果表單的所有字段都不爲空,並且將數據發送到服務器以將其插入到數據庫中,則會觸發其他連接。

我認爲這是一個好主意,在服務器端區分使用數組的不同連接。如果數組的第一個元素是「name」,則調用checkName函數,或者如果是「insert」,則調用insertInDB函數。

我創建了兩個小測試文件。他們不工作。連接打開並且客戶端發送數據。我不會遇到任何錯誤inte服務器或客戶端。但服務器從不響應。我沒有得到預期的數字,回到了客戶端。無論如何,我不認爲這是正確的。這是complecated,我希望代碼可以幫助你。

是否有可能,我正在嘗試做什麼?任何提示或替代?

感謝

代碼....在服務器端我列出的會議,只與特定的會話溝通 服務器端

function WebSocketTest1(){ 
var a=1; 
var b=2; 
var c = [a,b]; 

    var so = new WebSocket("ws://localhost:1337"); 

     so.onerror=function (evt) 
    {message.textContent = evt;} 

    so.onopen = function(){ 
     message.textContent = "opened"; 
    so.send(c); 
     message.textContent = "sended"; 
    } 


    so.onmessage = function (evt) { 
     var received_msg = evt.data; 
     document.getElementById("message").innerHTML=received_msg; 
    } 
} 

function WebSocketTest2(){ 
var d=3; 
var e=4; 
var f = [d,e]; 

    var sa = new WebSocket("ws://localhost:1337"); 

     sa.onerror=function (evt) 
    {message2.textContent = evt;} 


    sa.onopen = function(){ 
    message2.textContent = "opened"; 
    sa.send(f); 
    message2.textContent = "sended"; 
    } 


    sa.onmessage = function (evt) { 
     var received_msg = evt.data; 
     document.getElementById("message2").innerHTML=received_msg; 
} 
} 
</script> 
</head> 
<input type="button" value="one" onClick="WebSocketTest1()"><br/> 
    <input type="button" value="two" onClick="WebSocketTest2()"><br/> 
<body> 
    <div id="message"></div> 
mesage2</br> 
    <div id="message2"></div> 
</body> 
</html> 

,代碼發現here 和服務器端(片段)

var connections = {}; 
    var connectionIDCounter = 0; 
    var connection = request.accept(null, request.origin); 

    // Store a reference to the connection using an incrementing ID 
    connection.id = connectionIDCounter ++; 
    connections[connection.id] = connection; 


    console.log((new Date()) + ' Connection accepted.'); 

    connection.on('message', function(message) {    
    var ja=message; 
    if(ja[0]==1) 
    {ja[1]=7;}   

    else if(ja[0]==3) 
    {ja[1]=8;} 
    }); 



    connection.on('close', function(reasonCode, description) { 
    console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); 
    delete connections[connection.id]; 
    }); 
    }); 

// Send a message to a connection by its connectionID 
function sendToConnectionId(connectionID, data) { 
    var connection = connections[connectionID]; 
    if (connection && connection.connected) { 
     connection.send(ja[1]); 
    } 

回答

2

我只是想知道爲什麼你需要websocket。看起來你需要驗證應用程序中的用戶存在。如果用戶不存在,那麼你需要插入數據庫,否則拋出錯誤。

你可以通過jQuery的崗位和jQuery表單驗證 http://api.jquery.com/jQuery.post/

4

我不知道爲什麼你需要2個連接。 打開一個連接並將有效載荷作爲JSON發送。

例如

var ws = new WebSocket("ws://localhost:1336"); 
ws.send(JSON.stringify({ command: "checkname", params: "xxxx"; }); 
ws.send(JSON.stringify({ command: "submit", params: { ... }); 

在服務器端,您只需解析有效負載並確定執行哪個命令。

+0

如果您擁有不同的用戶角色並且某些角色不應提交訪問權限,那麼該怎麼辦?如果全部通過相同的套接字,則不能使用現有的基於路徑的訪問控制... – Gus

相關問題