使xampp和node(socket.io)一起工作

时间:2016-06-11 13:00:21

标签: node.js sockets socket.io

我有一个小的网络应用程序,它适用于某些函数的一些AngularJS和php以及来自数据库的一些查询(xampp的Apache和mySQL)。现在我想应用于Web应用程序中的简单聊天,我不知道如何配置也不知道端口等等。

遵循与http://socket.io/get-started/chat/类似的内容

我有这样的index.js

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

app.get('/', function(req, res){
   res.sendFile(__dirname + '/index.html');

});

io.on('connection', function(socket){
   console.log('a user connected');
   socket.on('disconnect', function(){
   console.log('user disconnected');
   });
});


http.listen(443, function(){
  console.log('listening on *:443');
});

我正在尝试端口443和80,但它们似乎无法工作(xampp显示80和443,不知道端口如何工作)

我的JS文件有var socket = io();

在我的浏览器控制台中,我得到了类似

的内容
socket.io-1.2.0.js:2 GET http://localhost/socket.io/?IO=3&transport=polling&t=1465649664392-0 404 (Not Found)

如何解决此问题?我希望在运行a user connected之后在cmd中输出node index.js,但我不这样做。

我按照示例进行聊天,没有xampp就可以正常工作。

3 个答案:

答案 0 :(得分:0)

您的问题是,socket.io工作时,需要能够通过http与后端进行通信(例如switch the protocol)。但如果xampp正在使用该端口,它将无法正常工作。您可以尝试将xampp转发请求http://localhost/socket.io/*发送到node.js服务器。

您可以使用ProxyPass directive in the Apache httpd.conf并执行类似

的操作
RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:8000/$1 [P,L]

ProxyPass        /socket.io http://localhost:8000/socket.io
ProxyPassReverse /socket.io http://localhost:8000/socket.io

还要确保已启用所需的模块

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

然后您必须在端口node.js

上启动8000服务器
http.listen(8000, function(){
  console.log('listening on *:8000');
}); 

答案 1 :(得分:0)

您可以简单地执行此操作,无需任何http重定向 打开你的客户端js

var configUrl = 'http://localhost:3000';// currently my node js using this port
var socket = io(configUrl); 

其余的东西在您的客户端顺利运作

socket.emit('chatMessage', ...
socket.on('chatMessage', ..

答案 2 :(得分:0)

我们可以使用 scoket.io 客户端库,因此我们可以使用 JavaScript 作为客户端,使用 node.js 作为服务器。

请查看以下示例:

index.html(客户端)

<!DOCTYPE html>
<html>
<head>
  <title>Hello world</title>
  <script src="https://cdn.socket.io/4.0.1/socket.io.js"></script>
</head>
<body>
  <script>
    var socket = io('http://localhost:5000');
  </script>
</body>
</html>

app.js(Node.js 服务器)

var io=require('socket.io')(5000,{
  cors:{
    origin: "http://localhost",
  },
});


//Whenever someone connects this gets executed
io.on('connection',socket => {
 console.log('A user connected');
});