Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将WebSocket与Pyramid和socket.io一起使用?_Javascript_Python_Websocket_Socket.io_Pyramid - Fatal编程技术网

Javascript 如何将WebSocket与Pyramid和socket.io一起使用?

Javascript 如何将WebSocket与Pyramid和socket.io一起使用?,javascript,python,websocket,socket.io,pyramid,Javascript,Python,Websocket,Socket.io,Pyramid,我正在尝试使用Pyramid和socket.io框架创建一个简单的WebSocket应用程序。 服务器端代码: from pyramid.response import Response from pyramid_socketio.io import SocketIOContext, socketio_manage import gevent def includeme(config): ''' This method is called on the application

我正在尝试使用Pyramid和socket.io框架创建一个简单的WebSocket应用程序。 服务器端代码:

from pyramid.response import Response
from pyramid_socketio.io import SocketIOContext, socketio_manage
import gevent

def includeme(config):
    '''
    This method is called on the application startup.
    '''
    config.add_route('socket.io', 'socket.io/*remaining')

class ConnectIOContext(SocketIOContext):
    # self.io is the Socket.IO socket
    # self.request is the request
    def msg_connect(self, msg):
        print "Connect message received", msg
        self.msg("connected", hello="world")

# Socket.IO implementation
@view_config(route_name="socket.io")
def socketio_service(request):
    print "Socket.IO request running"
    print request
    retval = socketio_manage(ConnectIOContext(request))
    return Response(retval)
客户端代码:

<script>
    var socket = null;
    $(document).ready(function() {
        socket = new io.Socket(null, null);
        socket.on('connect', function() {
        console.log("Connected");
        socket.send({type: "connect", userid: 123});
    });
    socket.on('message', function(obj) {
        console.log("Message received");
        console.log("Message", JSON.stringify(obj));
        if (obj.type == "some") {
            console.log("do some");
        }
    });
    socket.on('error', function(obj) {
        console.log("Error", JSON.stringify(obj));
    });
    socket.on('disconnect', function() {
        console.log("Disconnected");
    });

    console.log("Connecting...");
    socket.connect();
});
</script>  

var-socket=null;
$(文档).ready(函数(){
套接字=新io.socket(null,null);
socket.on('connect',function(){
控制台日志(“已连接”);
send({type:“connect”,userid:123});
});
socket.on('message',函数(obj){
控制台日志(“收到消息”);
log(“Message”,JSON.stringify(obj));
如果(对象类型==“某些”){
日志(“做一些”);
}
});
socket.on('error',函数(obj){
log(“Error”,JSON.stringify(obj));
});
socket.on('disconnect',function()){
控制台日志(“断开”);
});
console.log(“连接…”);
socket.connect();
});
我需要这段代码来使用web套接字进行连接,但它会退回到XHR轮询。 我怎样才能修好它


提前感谢您,Ivan。

您可能想查看gevent socketio的最新版本,以及其文档,网址为


约翰·安德森(John Anderson)、塞巴斯蒂安·贝尔(Sébastien Béal)和我自己在PyCon 2012 Sprint上进行了一次重大的革新。

你也可以看看。它与Pyramid很好地集成,并使用sockjs来实现与socket.io相同的角色,可以说更容易理解。

要真正回答这个问题,应该有一个{transports:[“websocket”]}对象作为io.socket()调用的第二个参数传入,即使用0.6版的客户端库。如果您使用的是JS库的0.7+版本,则不会在服务器端进行设置。您还必须使用支持web sockets的web浏览器(我知道Chrome是一款可以工作的浏览器)。gevent socketio的开发已经过时了,不要太依赖它。Ravi-本文中的两个答案都提到了使用gevent socketio,您会推荐使用什么替代方法?这一点已被弃用,取而代之的是gevent socketio: