gpt4 book ai didi

javascript - 无法从客户端发出套接字消息

转载 作者:行者123 更新时间:2023-11-30 09:49:44 25 4
gpt4 key购买 nike

因此,我正在设置一个 Express 应用程序,其中包含所有常见的好东西,如护照、 Mongoose 、connect-flash 等,我正在使用 socket.io 来监听和发送消息。

目前,我只是向所有人发送消息(稍后会设置房间)并且一切(但这个)都运行良好。当最终用户访问任何页面时,所有当前连接的用户都会收到一条消息“大家好!”,而刚刚连接的用户显然也会向他们自己发送消息。到目前为止一切都符合预期......

问题:我有一个页面,上面有一个按钮...

<button id="register" type="button" class="btn btn-warning">Register</button>

点击后,应该会发出一条消息“我要注册!” (目前对所有人都适用,但这并不重要)。作为响应,服务器应监听此消息并通过返回消息“嗯,会考虑一下!”来响应。

'registering' 从未在服务器上听到,因此无法发出 'registration-response' 的回复。

谁能看出我做错了什么?

我看过这个SocketIO, can't send emit data from client和其他几个相似的人,但我已经按照他们的建议去做了:/

注意:该应用正在 http://localhost:3000/ 上运行和 io 使用 http://localhost:8678/events .如果您需要任何进一步的信息,请告诉我

客户端 JS/jQuery (app.js)

var app = app || {};

app = (function($){

$(function () {

/////////////////////////////////////////////////////
// Connect to io and setup listeners
/////////////////////////////////////////////////////

var socket = io.connect('http://localhost:8678/events');
socket.on('connected', function (data) {
console.log(data); // Always see this in the console
});

socket.on('registration-response', function (data) {
console.log(data); // NOT seen in console
});

/////////////////////////////////////////////////////
// Setup click events
/////////////////////////////////////////////////////

$('#register').on('click', function(){
console.log('click'); // Always see this, so no binding issue
socket.emit('registering', 'I want to register!');
});
});

})(jQuery);

服务器端 JS

var app = require('express');
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server); //pass a http.Server instance
server.listen(8678); //listen on port 8678

////////////////////////////////////////
// Register event listeners
////////////////////////////////////////

var events = io.of('/events');

events.on('connection', function(socket){ // This is heard and callback fires
events.emit('connected', 'Hi everyone!'); // This gets sent fine
});

events.on('registering', function(data){
events.emit('registration-response', 'Hmmm, will think about it!');
});

最佳答案

服务器上的套接字未设置为监听事件。

你需要这样做

events.on('connection', function(socket){ // This is heard and callback fires
events.emit('connected', 'Hi everyone!'); // This gets sent fine
socket.on('registering', function(data){
events.emit('registration-response', 'Hmmm, will think about it!');
});
});

套接字现在知道在收到“正在注册”事件时要做什么,并将响应发送到“/events”命名空间。

关于javascript - 无法从客户端发出套接字消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com