WebSockets connection.send not function error

WebSockets connection.send not function error

本文关键字:function error not send connection WebSockets      更新时间:2023-09-26

我有一个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 事件处理程序一样。但我没有任何这样的事件或处理程序。

如何发送消息?

您似乎需要在事件中执行此操作。

更新:

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

根据此参考教程(websockets 简介),只需从请求消息的客户端从函数中调用发送请求。

即,根据此处的教程示例,在提交表单/按下发送消息按钮时调用请求。这一切都包含在onload函数中。

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

这是否有帮助,或者您的应用程序处于"复杂"状态已经实现了这一目标?