为什么Autobahn Twisted Websocket服务器没有完成与javascript客户端的握手?
我正在尝试使用TwistedWebSocket服务器,并将其连接到本地主机上的javascript客户端,而不是通过网络。服务器和客户端可以看到对方,但无法完成握手。是的,由于系统需求,我正在使用txWS提供的Hixie-76包装器 我不明白他们为什么不能联系 版本:autobahn 0.16,twisted 0.16.3 这是我试图实现的一个实际例子: 使用server.py和client.html 日志: Javascript:为什么Autobahn Twisted Websocket服务器没有完成与javascript客户端的握手?,javascript,python,websocket,twisted,autobahn,Javascript,Python,Websocket,Twisted,Autobahn,我正在尝试使用TwistedWebSocket服务器,并将其连接到本地主机上的javascript客户端,而不是通过网络。服务器和客户端可以看到对方,但无法完成握手。是的,由于系统需求,我正在使用txWS提供的Hixie-76包装器 我不明白他们为什么不能联系 版本:autobahn 0.16,twisted 0.16.3 这是我试图实现的一个实际例子: 使用server.py和client.html 日志: Javascript: function ConnectWebSocket() {
function ConnectWebSocket() {
websocket = new WebSocket('ws://127.0.0.1:8080');
websocket_open = true;
websocket.onopen = function(e) {
console.log('opened');
console.log(e);
websocket.send('slow test');
};
websocket.onclose = function(e) {
console.log("Connection closed.");
websocket_open = false;
websocket = null;
ConnectWebSocket();
};
websocket.onmessage = function(e) {
console.log('message');
console.log(e.data);
};
websocket.onerror = function(e) {
console.log('error');
console.log(e);
};
}
ConnectWebSocket();
好吧,我找到问题了。正如Michael S所暗示的,它可能在Hixie-76包装中,是的。开发人员一定是让该协议随着时间流逝而失效了。我可以通过在代码中追溯来确认这一点。我会向txWS的开发者汇报
我找到了Hixie-76问题的替代解决方案。我把包装换成了txWebSockets。这不是一个优雅的解决方案,但它现在可以工作了。好的,我发现了问题。正如Michael S所暗示的,它可能在Hixie-76包装中,是的。开发人员一定是让该协议随着时间流逝而失效了。我可以通过在代码中追溯来确认这一点。我会向txWS的开发者汇报
我找到了Hixie-76问题的替代解决方案。我把包装换成了txWebSockets。这不是一个优雅的解决方案,但它现在可以工作。我能看到的唯一可能是问题是
(u“ws://127.0.0.1:8080”)中缺少“u”)
这只是将字符串标记为unicode,从我的理解来看,通常不是什么大问题。我从来没有使用过Hixie-76包装器,所以我猜问题出在WebSocketFactory(factory)
,因为其他一切看起来都很好。我能看到的唯一问题是(u“ws://127.0.0.1:8080”)中缺少“u”)
这只是将字符串标记为unicode,据我所知,这通常不是什么大事。我从来没有使用过Hixie-76包装器,所以我猜问题出在哪里,因为其他一切看起来都很好。
from txws import WebSocketFactory
from twisted.internet import reactor
from twisted.python import log
from autobahn.twisted.websocket import WebSocketServerFactory
from autobahn.twisted.websocket import WebSocketServerProtocol
import json
import sys
class MyServerProtocol(WebSocketServerProtocol):
def onMessage(self, payload, isBinary):
print "Message Received!!!!"
msg = json.dumps({'status':'PLEASE WORK'})
self.sendMessage(msg, isBinary=False)
def onClose(self, wasClean, code, reason):
print "WebSocket connection closed: "
print str(wasClean)
print str(code)
print str(reason)
def make_server():
print 'Making ws server'
log.startLogging(sys.stdout)
factory = WebSocketServerFactory("ws://127.0.0.1:8080")
factory.protocol = MyServerProtocol
reactor.listenTCP(8080, WebSocketFactory(factory)) #txWS WebSocketFactory wrapper
reactor.run()
function ConnectWebSocket() {
websocket = new WebSocket('ws://127.0.0.1:8080');
websocket_open = true;
websocket.onopen = function(e) {
console.log('opened');
console.log(e);
websocket.send('slow test');
};
websocket.onclose = function(e) {
console.log("Connection closed.");
websocket_open = false;
websocket = null;
ConnectWebSocket();
};
websocket.onmessage = function(e) {
console.log('message');
console.log(e.data);
};
websocket.onerror = function(e) {
console.log('error');
console.log(e);
};
}
ConnectWebSocket();