WebSockets connection.send没有函数错误

时间:2016-03-23 04:56:03

标签: javascript

我有一个Tornado客户端应用程序,它在当前状态下运行良好:在简化版本中,它具有类似下面代码段的结构:

function comms(callback, newSession, connection) {
     if (newSession == true) {
          connection = new WebSocket('ws://localhost:9022/id/01234');

          connection.onopen = function () {
               alert("connected");
               connection.send('hello world');
          };
     }

     connection.onerror = function (error) {
          alert('WebSocket Error ' + error);
     };


     connection.onmessage = function (e) {
          alert('>> message from Host: ' + e.data);
          callback(e.data, connection);
     }
}

我可以连接,我可以检测到连接已打开,我可以发送消息。我可以收到消息。我可以通过回调函数转发消息并返回。没问题。所有这些都是通过以下方式完成的:

connection.onXXX事件处理函数。

现在我想向服务器发送一些未经请求的消息,如下所示:

function comms(callback, newSession, connection, request=false) {
     if (newSession == true) {
          connection = new WebSocket('ws://localhost:9022/id/01234');

          connection.onopen = function () {
               alert("connected");
               connection.send('hello world');
          };
     }

     connection.onerror = function (error) {
          alert('WebSocket Error ' + error);
     };


     connection.onmessage = function (e) {
          alert('>> message from Host: ' + e.data);
          callback(e.data, connection);
     }

     if (request == true) {
          connection.send("request_msg");
     }
}

虽然连接已打开,但我无法发送此类请求消息。我收到: “connection.send不是函数”错误。

据我所知,不管怎样,发送请求必须包装到一个函数中,就像其他connection.onXXXX事件处理程序一样。但我没有任何此类事件或处理程序。

如何发送信息?

1 个答案:

答案 0 :(得分:0)

看起来你需要在一个活动中这样做。

<强>更新:

onmessage事件是服务器端触发的事件,因此无法在该事件处理程序中完成任何客户端处理。我建议客户端功能应该在不同的功能(不是通信)中处理。

根据this reference tutorial (an-introduction-to-websockets),只需从请求邮件的客户端调用函数内的发送请求。

IE中。根据教程示例,找到here,在提交表单/按下发送消息按钮时调用请求。这全部包含在onload函数中。

所以你需要一些可以调用socket connection(socket).send()函数的客户端事件或循环,只需传入文本即可。

这是否有帮助,或者您的应用程序处于“复杂”状态是否已实现此目的?