我试图使某些websocket发出接收双向通信,所以如果消息从客户端丢失,客户端重试,并与服务器相同。我对回调不是很熟悉,我所读到的只是它们存在,你可以使用它们,但我找不到任何如何使用它们的好例子,或者我不理解这些例子。
这就是我现在的代码
在index . html
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
namespace = '/socket';
// Connect to the Socket.IO server.
// The connection URL has the following format:
// http[s]://<domain>:<port>[/<namespace>]
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
// Event handler for new connections.
// The callback function is invoked when a connection with the
// server is established.
socket.on('connect', function() {
isopen = true;
socket.emit('join_room');
});
});
});
</script>
在socks.py
@socketio.on('join_room', namespace='/socket')
def on_room():
if 'uid' not in session:
session['uid'] = str(uuid.uuid4())
room = str(session['uid'])
print('join room {}'.format(room))
join_room(room)
所以在这个例子中,客户端html代码发出join_room,我希望客户端验证服务器已经接收到它,如果没有尝试再次发出join_room。
这必须在两个方向上发生。
有办法做到这一点吗?
你可以在你的emit调用中添加一个回调:
socket.emit('join_room', () => { console.log('callback received!'); });
如果您希望服务器在回调中传递信息,那么在服务器处理程序中添加一条返回语句:
@socketio.on('join_room', namespace='/socket')
def on_room():
if 'uid' not in session:
session['uid'] = str(uuid.uuid4())
room = str(session['uid'])
print('join room {}'.format(room))
join_room(room)
return 42
然后无论服务器返回什么都作为参数传递给你的回调:
socket.emit('join_room', (arg) => { console.log('callback received with ' + arg); });