ann*_*d3r 1 javascript jquery node.js socket.io
因此,我正在设置一个 Express 应用程序,其中包含所有常用功能,如护照、猫鼬、connect-flash 等,并且我使用 socket.io 来监听和发出消息。
目前,我只是向每个人发送消息(稍后将设置房间),一切(但这个)运行良好。当最终用户访问任何页面时,所有当前连接的用户都会收到一条消息“大家好!”,并且刚刚连接的用户显然也会向自己发送该消息。到目前为止一切都如预期...
问题: 我有一个页面,上面有一个按钮......
<button id="register" type="button" class="btn btn-warning">Register</button>
单击时,应发出一条消息“我想注册!” (目前对所有人来说但这并不重要)。作为响应,服务器应该侦听此消息并通过发回一条消息来响应,说“嗯,会考虑一下!”。
服务器上从未听到“注册”,因此无法发出“注册响应”的回复。
我见过这个SocketIO,无法从客户端发送发射数据和其他几个类似的数据,但我已经按照他们的建议做了:/
注意:应用程序正在运行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);
Run Code Online (Sandbox Code Playgroud)
服务器端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!');
});
Run Code Online (Sandbox Code Playgroud)
服务器上的套接字未设置为侦听该事件。
你需要这样做
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!');
});
});
Run Code Online (Sandbox Code Playgroud)
套接字现在知道在收到“注册”事件时要做什么,并将响应发送到“/events”命名空间。
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |