2013-08-04 71 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

相关问题