嘿我试图创建一个使用SocketIO的消息应用程序。我有一个用烧瓶写的服务器和用C#编写的客户端。我为客户使用SocketIoClientDotNet
(https://github.com/Quobject/SocketIoClientDotNet)。Socketio - 烧瓶服务器和C#客户端
这是我的代码:
瓶:routes.py
from flask import Flask
from flask.ext.socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def home():
return "hello"
@socketio.on('connect')
def connect():
print("CONNECTED")
@socketio.on("message")
def test():
print("TEST WORKS")
if __name__ == '__main__':
socketio.run(app)
C#:
public static class EnvConnections {
public static IO.Options CreateOptions() {
var options = new IO.Options();
options.Port = 5000;
options.Hostname = "127.0.0.1";
options.ForceNew = true;
return options;
}
public static void Connect() {
Uri uri = new Uri("http://127.0.0.1:5000");
var socket = IO.Socket(uri, CreateOptions()); //also tried to create the socket only with url IO.Socket("http://127.0.0.1:5000")
socket.On(Socket.EVENT_CONNECT,() => {
Console.Write("EVENT_CONNECT");
socket.Disconnect();
});
socket.Connect(); //tried to remove this
Console.ReadLine();
}
在这两个平台上印什么。它看起来像是在它们之间创建了一个连接(一旦连接建立,此行上的瓶子就会无限打印:127.0.0.1 - - [20/Jan/2016 11:23:43] "GET /socket.io/?EIO=3&transport=polling&t=635888858234059292-4049&b64=1 HTTP/1.1" 200 -
)
我在做什么错?
编辑:我安装gevent
后,我开始接收连接事件。问题在于它卡在它上面,没有其他函数被调用。纵观瓶安慰它看起来像它使用的,而不是拉动的WebSocket(某种后卫机制),所以我试图改变C#套接字选项:
IO.Options options = new IO.Options();
//options.Transports = ImmutableList.Create<string>(Polling.NAME);
options.Upgrade = true;
var socket = IO.Socket("http://127.0.0.1:5000", options);
,但会将打印传送=轮询
EDIT2 :
fb0f4c189334468dba90255880b528a4: Sending packet MESSAGE with 0
127.0.0.1 - - [20/Jan/2016 17:49:13] "GET /socket.io/?EIO=3&transport=polling&t=635889089536079075-2035&b64=1 HTTP/1.1" 200 355 0.002000
5cea6ce4dd8b47d79e79dd96747c26e4: Sending packet OPEN with {'pingTimeout': 60000, 'sid': '5cea6ce4dd8b47d79e79dd96747c26e4', 'upgrades': ['websocket'], 'pingInterval': 25000}
5cea6ce4dd8b47d79e79dd96747c26e4: Sending packet MESSAGE with 0
127.0.0.1 - - [20/Jan/2016 17:49:13] "GET /socket.io/?EIO=3&transport=polling&t=635889089536109077-2036&b64=1 HTTP/1.1" 200 355 0.003000
f768281808204af995421b4dbb2cda1c: Sending packet OPEN with {'pingTimeout': 60000, 'sid': 'f768281808204af995421b4dbb2cda1c', 'upgrades': ['websocket'], 'pingInterval': 25000}
CONNECTED
CONNECTED
f768281808204af995421b4dbb2cda1c: Sending packet MESSAGE with 0
127.0.0.1 - - [20/Jan/2016 17:49:13] "GET /socket.io/?EIO=3&transport=polling&t=635889089536149079-2037&b64=1 HTTP/1.1" 200 355 0.002000
e4eb16fcd12f41898ba58a309014b85c: Sending packet OPEN with {'pingTimeout': 60000, 'sid': 'e4eb16fcd12f41898ba58a309014b85c', 'upgrades': ['websocket'], 'pingInterval': 25000}
e4eb16fcd12f41898ba58a309014b85c: Sending packet MESSAGE with 0
127.0.0.1 - - [20/Jan/2016 17:49:13] "GET /socket.io/?EIO=3&transport=polling&t=635889089536179081-2038&b64=1 HTTP/1.1" 200 355 0.002000
70f45826d89b42bba3842e41b8ae8b08: Sending packet OPEN with {'pingTimeout': 60000, 'sid': '70f45826d89b42bba3842e41b8ae8b08', 'upgrades': ['websocket'], 'pingInterval': 25000}
70f45826d89b42bba3842e41b8ae8b08: Sending packet MESSAGE with 0
127.0.0.1 - - [20/Jan/2016 17:49:13] "GET /socket.io/?EIO=3&transport=polling&t=635889089536219083-2039&b64=1 HTTP/1.1" 200 355 0.002000
CONNECTED
CONNECTED
要使WebSocket可用,您必须安装gevent或eventlet,并且客户端应支持升级,以使该部分看起来没问题。请通过将服务器初始化为'socketio = SocketIO(app,logger = True,engineio_logger = True)'将日志记录添加到服务器。然后请为您的问题添加一个日志会话。 – Miguel
用记录器信息编辑 –
客户端反复尝试连接服务器。由于某种原因,它不断发送连接请求。在粘贴的短日志中有5个不同的连接,您可以通过查看'sid'值(十六进制字符的长序列)来区分它们。我建议您使用官方的Javascript客户端测试相同的服务器,并比较服务器日志的输出。然后,您可能需要将这两个日志发送给C#客户端的开发人员。 – Miguel