我有一个小的网络应用程序,它适用于某些函数的一些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就可以正常工作。
答案 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');
});