![](/img/trans.png)
[英]Java WebSocket server with HTML5 client - is socket.io necessary?
[英]include socket.io server into my html
我已经成功运行了nodeServer和Client。 但我想将其服务器连接到代理。 这是节点客户端:
<html>
<head>
<script src="http://localhost:8000/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script>
var name = '';
var socket = io.connect('http://localhost:8000');
// at document read (runs only ones).
$(document).ready(function(){
// on click of the button (jquery thing)
// the things inside this clause happen only when
// the button is clicked.
$("button").click(function(){
// just some simple logging
$("p#log").html('sent message: ' + $("input#msg").val());
// send message on inputbox to server
socket.emit('chat', $("input#msg").val() );
// the server will recieve the message,
// then maybe do some processing, then it will
// broadcast it again. however, it will not
// send it to the original sender. the sender
// will be the browser that sends the msg.
// other browsers listening to the server will
// recieve the emitted message. therefore we will
// need to manually print this msg for the sender.
$("p#data_recieved").append("<br />\r\n" + name + ': ' + $("input#msg").val());
// then we empty the text on the input box.
$("input#msg").val('');
});
// ask for the name of the user, ask again if no name.
while (name == '') {
name = prompt("What's your name?","");
}
// send the name to the server, and the server's
// register wait will recieve this.
socket.emit('register', name );
});
// listen for chat event and recieve data
socket.on('chat', function (data) {
// print data (jquery thing)
$("p#data_recieved").append("<br />\r\n" + data.msgr + ': ' + data.msg);
// we log this event for fun :D
$("p#log").html('got message: ' + data.msg);
});
</script>
</head>
<body>
<input type="text" id="msg"></input><button>Click me</button>
<p id="log"></p>
<p id="data_recieved"></p>
</body>
</html>
这是服务器:
var check="check";
var io = require('socket.io').listen(8000);
// open the socket connection
io.sockets.on('connection', function (socket) {
// listen for the chat even. and will recieve
// data from the sender.
console.log('hello nahid');
socket.on('chat', function (data) {
// default value of the name of the sender.
var sender = 'unregistered';
check=sender;
// get the name of the sender
socket.get('nickname', function (err, name) {
console.log('Chat message by ', name);
console.log('error ', err);
sender = name;
});
// broadcast data recieved from the sender
// to others who are connected, but not
// from the original sender.
socket.broadcast.emit('chat', {
msg : data,
msgr : sender
});
});
// listen for user registrations
// then set the socket nickname to
socket.on('register', function (name) {
// make a nickname paramater for this socket
// and then set its value to the name recieved
// from the register even above. and then run
// the function that follows inside it.
socket.set('nickname', name, function () {
// this kind of emit will send to all! :D
io.sockets.emit('chat', {
msg : "naay nag apil2! si " + name + '!',
msgr : "mr. server"
});
});
});
});
他们在一起工作得很好。 现在,我想将服务器文件包含到另一个html客户端中,如下所示:
<script type="text/javascript" src="nodeServer.js"></script>
为了访问nodeServer.js中的变量。 但是错误“未捕获的ReferenceError:require尚未定义”,我该怎么做才能解决这个问题,并且我也得到了以下代码:这样它就知道socket.io的语法是什么。 但是错误存在。
我应该怎么做才能使我的html文件知道socket.io.js。
编辑:
关于已检查答案的最后一条评论是什么解决了我的问题。 感谢@Houseman。
我敢肯定,您不能只是将Node.js文件放入html DOM中并期望它能工作。 Node.js文件由Node.js运行,而不是由客户端html javascript运行。
这行<script src="http://localhost:8000/socket.io/socket.io.js"></script>
足以将io
对象加载到您的DOM中,并使其可以通过javascript访问。
删除此行:
<script type="text/javascript" src="nodeServer.js"></script>
,并且如果服务器运行在端口8000上就可以了。但是,服务器代码似乎没有实际运行所需的组件。
如果要将变量从客户端传递到服务器,或者相反,请使用套接字,就像您已经在做的一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.