Tôi đang cố tạo một ứng dụng WebSocket đơn giản bằng cách sử dụng khung công tác Pyramid và socket.io. server-side code:Cách sử dụng Websockets với Pyramid và socket.io?
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)
Khách hàng mã:
<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>
tôi cần mã này để sử dụng web-socket cho kết nối, nhưng nó rơi trở lại XHR-bỏ phiếu. Làm cách nào để khắc phục sự cố?
Cảm ơn trước, Ivan.
Để thực sự trả lời câu hỏi, phải có đối tượng {transports: ["websocket"]} được truyền vào như tham số thứ hai của cuộc gọi io.Socket(), đang sử dụng phiên bản 0.6 của thư viện ứng dụng khách. Nếu bạn đang sử dụng phiên bản 0.7+ của JS lib, nó không được đặt ở phía máy chủ. Bạn cũng phải sử dụng trình duyệt web đã bật trình duyệt web (Chrome là một trong những ứng dụng mà tôi biết không hoạt động). – abourget
phát triển gevent-socketio là khá chết, không dựa nhiều vào nó. –
Ravi- Cả hai câu trả lời trong đề cập đến tread này sử dụng gevent-socketio, bạn sẽ khuyên bạn nên sử dụng cái gì thay thế? – Amoliski