gpt4 book ai didi

node.js - Azure 网络 Node js

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:36 25 4
gpt4 key购买 nike

我使用 azure node js 模板创建了一个 node js 网站该应用程序使用 express 和 socket io

这是服务器代码我编写了一个简单的服务器端代码,其中包含每个函数的日志

我的服务器端代码是:

var express = require('express');
var app = express();
////Creating Server
var server = require('http').createServer(app);
//For Socket IO
var io = require('socket.io').listen(server);
var port = process.env.port || 1337
server.listen(port);
var connections = [];
console.log('Server Running....');

io.sockets.on('connection', function (socket) {
connections.push(socket);
console.log('Connected: %s sockets connected', connections.length);

socket.on('subscribe', function (room) {
//It's not logging this
console.log('Connections: ', connections.length, ' Room: ', room);
socket.join(room);
});

socket.on('disconnect', function (data) {
connections.splice(connections.indexOf(socket), 1);
console.log('Disconnected: %s sockets still connected', connections.length);
});

socket.on('send message', function (data) {
console.log('Message.', data.message);
//this works fine when i comment the 'subscribe' function
io.sockets.emit('new message', { msg: data.message, room: data.room});

//I want this to work
io.sockets.in(data.room).emit('new message', { msg: data.message, room: data.room });
});
});


});

来自客户我连接到网站并使用发射器连接到特定房间

客户端代码:

//Inside document.ready i am calling this

var socket = io.connect('http://example.azurewebsites.net'); //url
socket.emit('subscribe', 1);//Hardcoded
$('#send').click(function (e) { // Send Button
socket.emit('send message', {
room: 1,
message: $('#message').val() // Input Box Value
});
});
socket.on('new message', function (data) {
console.log('Message :',data.message,'Room :',data.room);
});

我面临的问题是“订阅”功能不起作用,我没有得到它的日志。

可能是什么原因

最佳答案

所以我拿了你的代码并做了一个新项目来测试。

服务器:

var app = require( 'express' )()
var http = require( 'http' ).createServer( app );
var io = require( 'socket.io' )(http);

// serve our main page
app.get( '/', function( req, res ){
res.sendFile( __dirname + '/index.html' );
});

// called when socket.io gets an incoming connection
io.on( 'connection', function( socket ){

console.log( "Socket " + socket.id + " connected" );

// called when we disconnect
socket.on( 'disconnect', function(){
console.log( "Socket " + socket.id + " disconnected" );
})

// subscribe to a room
socket.on( 'subscribe', function( room ){
console.log( "Socket " + socket.id + " is connecting to room " + room );
socket.join( room );
})

// called when the socket sends a message
socket.on( 'send message', function( data ){
console.log( "Message from " + socket.id + ": " + data.message );

io.emit( 'new message', { msg: data.message, room: data.room } );
io.in( data.room ).emit( 'new message', { msg: '[Room' + data.room + '] ' + data.message, room:data.room } );
})
})

// start our server
http.listen( 3000, function() {
console.log( 'Listening on *:3000' );
})

客户:

<!DOCTYPE html>
<html>
<head>
<title>Socket.IO test</title>
<script src='/socket.io/socket.io.js'></script>
<script>
var socket = io();

// listen for new messages
socket.on( 'new message', function( data ){
console.log( "Received message", data );
})

// subscribe to our room
socket.emit( 'subscribe', 1 );

// send our message
socket.emit( 'send message', {
room: 1,
message: "Hello world"
})
</script>
</head>
<body></body>
</html>

除了小的风格差异(调用 io.sockets 是多余的,我只是直接进行客户端调用而不是通过表单,并且我删除了 connections 数组代码并且与问题无关),这是同一回事。

这在本地对我有用。

当您连接到外部站点时,如果您没有收到 subscribe 事件的日志,我建议这是因为您正在调用 subscribe 在您的客户端套接字完成连接之前。

客户端有一个 connect 事件,您可以监听该事件并在回调中移动 subscribe 调用。所以你的客户端代码现在变成了这样:

var socket = io();

// listen for new messages
socket.on( 'new message', function( data ){
console.log( "Received message", data );
})

// called when we're connected
socket.on( 'connect', function() {

// subscribe to our room
socket.emit( 'subscribe', 1 );

// send our message
socket.emit( 'send message', {
room: 1,
message: "Hello world"
})
})

关于node.js - Azure 网络 Node js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42906574/

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