【发布时间】:2015-07-13 08:09:56
【问题描述】:
我正在尝试在我的网站上实现最基本的 socket.io/node.js 应用程序。我想在 app.js 中的端口 80(http)而不是端口 3000 上运行它,无论出于何种原因,它都会破坏整个应用程序服务器端。我实际上只是将 server.listen(3000) 更改为 server.listen(80),它会破坏应用程序。这是 app.js 和客户端脚本。我对堆栈格式不是很好,所以请原谅我。
服务器端 App.Js:
var express=require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
nicknames = [];
server.listen(3000);
app.get('/', function(req, res){
res.sendFile(__dirname + '/chat.html');
});
io.sockets.on('connection', function(socket){
socket.on('new user', function(data, callback){
if(nicknames.indexOf(data) != -1){
callback(false);
}
else{
callback(true);
socket.nickname = data;
nicknames.push(socket.nickname);
io.sockets.emit('usernames', nicknames);
}
});
socket.on('send message', function(data){
io.sockets.emit('pushMessage', {msg: data, nick: socket.nickname});
});
socket.on('disconnect', function(data){
if(!socket.nickname) return;
nicknames.splice(nicknames.indexOf(socket.nickname), 1);
io.sockets.emit('usernames',nicknames);
});
});
客户端 HTML/JS:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<title>SchoolChat</title>
<style>
#chat{
height:500px;
}
#mainWrap{
display:none;
}
#chatWrap{
float: left;
border:1px #000 solid;
}
#chat {
list-style-type: none;
margin:0;
padding:0;
}
#chat li {
padding:5px 10px;
}
#chat li: nth-child(odd) {
background:#eee;
}
</style>
</head>
<body>
<div id="nickWrap">
<p>Enter a Username</p>
<p id="nickError"></p>
<form id="setUser">
<input size="35" id="userName"></input>
<input type="submit"></input>
</form>
</div>
<div id="mainWrap">
<div id="chatWrap">
<ul id="chat"></ul>
<form id="send-message">
<input size="35" id="message"></input>
<input type="submit"></input>
</form>
</div>
<div id="users"></div>
</div>
<script src="/socket.io/socket.io.js"></script>
<script>
jQuery(function($){
var socket = io.connect();
var $messageForm = $('#send-message');
var $usernameForm = $("#setUser");
var $userName = $("#userName");
var $nickError = $("nickError");
var $nickBox= $('#nickWrap');
var $messageBox = $('#message');
var $chat = $('#chat');
$usernameForm.submit(function(e){
e.preventDefault();
socket.emit('new user', $userName.val(), function(data){
if (data){
$("#nickWrap").hide();
$("#mainWrap").show();
}
else{
$("#nickError").html('That username is already in use.');
}
});
$nickBox.val('')
});
socket.on('usernames', function(data){
var html= " ";
for(i=0; i<data.length; i++){
html += data[i] + '</br>'
}
$('#users').html(html);
});
$messageForm.submit(function(e){
e.preventDefault();
socket.emit('send message', $messageBox.val());
$messageBox.val("");
});
socket.on('pushMessage', function(data){
$chat.append("<li><b>" + data.nick+ ":" + "</b>" + data.msg+ "</li>");
});
});
</script>
</html>
【问题讨论】:
-
你在什么操作系统上运行服务器?您是否以足够高的权限运行以侦听端口 80?
-
Dylan,由于您是 Stackoverflow 的新人,我会指出,当您在此处发布问题时,您应该在前 30 分钟内多次查看是否有澄清问题,所以人们可以理解你的问题。 StackOverflow 不像许多在线论坛那样工作,您在这些论坛中发布您的问题并在很长一段时间后(比如第二天)回来。在这里,如果您的问题不清楚并且您没有回应,您的问题可能会因为不清楚而被关闭。
-
“它破坏了整个应用服务器端”不是很有帮助。出了什么问题?它不听吗?它会崩溃吗?有错误信息吗?
标签: javascript node.js sockets socket.io