gpt4 book ai didi

node.js - 在 Node 中的同一应用程序中监听两个端口

转载 作者:IT王子 更新时间:2023-10-29 06:15:04 30 4
gpt4 key购买 nike

我在端口 8081 上使用 socket.io 并在 8080 上使用 redis 进行表达。

我不能在同一端口上同时使用两者,否则会发生冲突。当下面的代码运行时,php session 记录在控制台中,我得到了 socket.io started 消息,但是 socket.io 没有进一步记录到控制台。

编辑:

修改了下面的代码,现在我可以登录 socket.io 但我现在看不到 cookie 数据。

我不确定哪里出了问题?

编辑 - 添加测试代码

完整的测试代码在这里:

https://www.dropbox.com/sh/nbrmkeq7dwurizi/AADBvl4N5ksnCnFZ6MHFkIyva

服务器代码:

    var express = require('express'),
http = require('http'),
app = express(),
server = http.createServer(app),
io = require('socket.io').listen(8081),
cookieParser = require('cookie-parser'),
session = require('express-session'),
RedisStore = require('connect-redis')(session);

app.use(cookieParser());

app.use(session({
store: new RedisStore({
prefix: 'session:php:'
}),
name: 'PHPSESSID',
secret: 'node.js rules'
}));

app.use('/', function(req, res) {
console.log(req.session);
res.sendfile('/');
});

io.sockets.on('connection', function (socket) {

socket.on('subscribe', function(room) {
console.log('joining room', room);
socket.join(room);
});
});

app.listen(8080);

相关客户端代码:

$(window).load(function () {

var socket = io.connect('http://localhost:8081');

var $conversation_id = $chat.data('conversation-id');

socket.emit('subscribe', $conversation_id);
});

调用socket IO JS文件:

<script type="text/javascript" src="http://me*****.dev:8081/socket.io/socket.io.js"></script>

控制台输出:

 info  - socket.io started
debug - client authorized
info - handshake authorized w8S6Kc-XSFNq1N_pZErF
debug - setting request GET /socket.io/1/websocket/w8S6Kc-XSFNq1N_pZErF
debug - set heartbeat interval for client w8S6Kc-XSFNq1N_pZErF
debug - client authorized for
debug - websocket writing 1::
info - transport end (undefined)
debug - set close timeout for client w8S6Kc-XSFNq1N_pZErF
debug - cleared close timeout for client w8S6Kc-XSFNq1N_pZErF
debug - cleared heartbeat interval for client w8S6Kc-XSFNq1N_pZErF
debug - discarding transport
debug - client authorized
info - handshake authorized hkMkIJXGH3ISmbzMZErG
debug - setting request GET /socket.io/1/websocket/hkMkIJXGH3ISmbzMZErG
debug - set heartbeat interval for client hkMkIJXGH3ISmbzMZErG
debug - client authorized for
debug - websocket writing 1::
info - transport end (undefined)
debug - set close timeout for client hkMkIJXGH3ISmbzMZErG
debug - cleared close timeout for client hkMkIJXGH3ISmbzMZErG
debug - cleared heartbeat interval for client hkMkIJXGH3ISmbzMZErG
debug - discarding transport
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized -L7kx-SdPrraKV3DZErH
debug - setting request GET /socket.io/1/websocket/-L7kx-SdPrraKV3DZErH
debug - set heartbeat interval for client -L7kx-SdPrraKV3DZErH
debug - client authorized for
debug - websocket writing 1::
joining room 1

最佳答案

您不会在您的路由/中向客户端发送响应。在使用 socket.io 之前创建有效的 html 页面

app.get('/', function(req, res) {
res.end('<html><body><script type="text/javascript"></script></body></html>');
});

并使用您的相关客户端代码向客户端发送有效响应

关于node.js - 在 Node 中的同一应用程序中监听两个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23868086/

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