我有一个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事件处理程序一样。但我没有任何此类事件或处理程序。
如何发送信息?
答案 0 :(得分:0)
看起来你需要在一个活动中这样做。
<强>更新:强>
onmessage
事件是服务器端触发的事件,因此无法在该事件处理程序中完成任何客户端处理。我建议客户端功能应该在不同的功能(不是通信)中处理。
根据this reference tutorial (an-introduction-to-websockets),只需从请求邮件的客户端调用函数内的发送请求。
IE中。根据教程示例,找到here,在提交表单/按下发送消息按钮时调用请求。这全部包含在onload
函数中。
所以你需要一些可以调用socket connection(socket).send()
函数的客户端事件或循环,只需传入文本即可。
这是否有帮助,或者您的应用程序处于“复杂”状态是否已实现此目的?