socket.io - 在 socket.on() 之外的 Socket.emit()
问题描述
我们是否总是必须像这样在 socket.on() 中使用 socket.emit() :
io.sockets.on('connection', function (socket) {
console.log('User connected !');
retrieveDictionnary((dictionnary) =>{
socket.emit('dictionnarySend', dictionnary);
}
}
我想在我的客户端创建一个函数,当我点击一个按钮时向服务器询问信息:
translateServer(parameter, control){
this.socket.emit('translate', [parameter,control]);
}
但似乎它不起作用,服务器从未收到此消息。
谢谢 !
解决方案
您在上面使用的模式是与套接字交互的推荐方式(即socket
在“连接”事件触发时获取一个实例,然后emit()
从该套接字实例调用,等等)。
如果我正确理解您的客户端要求,您希望通过 Web 套接字将数据发送到服务器 - 您确定您已在客户端和服务器之间建立 Web 套接字连接的套接字吗?
例如,如果您将以下内容添加到客户端代码中,您应该会在控制台中看到一条成功消息:
const socket = io.connect('YOUR SERVER ADDRESS');
socket.on('connect', () => {
console.log('connected to server!');
// [UPDATE]
// This assumes you have a <button> element on your page. When
// clicked, a message will be sent to the server via sockets
document.querySelector('button').addEventListener('click', (event) => {
// Prevent button click reloading page
event.preventDefault();
// Send message to server via socket
socket.emit('MESSAGE_ID', 'test message from client' + new Date());
});
});
更新
这显示了您的原始服务器代码,扩展了接收和打印通过套接字从客户端发送的数据所需的详细信息:
io.sockets.on('connection', function (socket) {
console.log('User connected !');
// Register a server handler for any messages from client on MESSAGE_ID channel
socket.on('MESSAGE_ID', (message) => {
// Print the message received from client in console
console.log('message from client', message);
})
retrieveDictionnary((dictionnary) =>{
socket.emit('dictionnarySend', dictionnary);
}
}
推荐阅读
- python - 使用 Pyinstaller 获取 exe,包括 pygubu
- sql - 在 clickhouse 上类似 ON CONFLICT DO NOTHING
- python-3.x - Jupyter / Tornado “弃用警告:`should_run_async` 将来不会自动调用 `transform_cell`”
- pycharm - JetBrains IDE - 控制台打印消息中本地文件的可点击链接
- ios - 当细分发生变化时,如何在 Eureka 中更新我的列表?
- python - 为什么我的类不继承其基类中定义的方法?
- r - 如何指定带有 googledrive R 包的文件夹?
- postgresql - r2dbc postgres 驱动程序 - 如何从 PooledConnection 中提取 PostgresqlConnection
- ffmpeg - 如何在 ffmpeg 上使用来自 x265 的 --abr-ladder
- office365 - 可以在 Excel 加载项中创建隐藏的自定义公式