level 2
我自学的nodejs 我是做服务器的 本来是想用socket.io来写个服务器的。可是网上关于socket.io的服务器全都是一些做http服务器的人写的给我造成了极大干扰。我相信如果是自学的nodejs想学服务器的菜鸟们也会遇到这些问题吧
2017年05月14日 05点05分
2
level 2
废话不多说直接贴码
服务器代码
var net = require("net");var events=require('events');var emitter=new events.EventEmitter();var count=0;var baseId = 1000;var clientSockets = [];var clientSocketsMap={};var server = net.createServer(function(socket){ count++; baseId++; console.log('在线人数共'+count+'人') var name='client'+baseId; socket.userName = name; socket.userId = baseId; clientSockets.push(socket); clientSocketsMap[socket.userId]=socket; console.log(name+' connected'); socket.setEncoding('utf8'); socket.on('data', function(data){ if(data.indexOf(':')==10){ var to=data.slice(6,10); if( clientSocketsMap[to] ){ clientSocketsMap[to].write(data) }; } else{ for(var i=0;i<clientSockets.length;i++){ var socket=clientSockets[i]; if(name==clientSockets[i].userName){ } else{ socket.write(name+" say: "+data) }; }; } console.log( name+' say:', data); }) socket.on('error', function(){ count--; console.log(name+'disconnected'); console.log('在线人数共'+count+'人'); var index = clientSockets.indexOf(socket); if(index != -1){ clientSockets.splice(index,1); } delete clientSocketsMap[socket.userId]; });});
server.listen(8080, function(){ console.log(' server at port 8080');});
2017年05月14日 05点05分
3
level 2
客户端
var net = require("net"); var client = net.connect(8080, function( ){ console.log('server connected' );});client.setEncoding('utf8')client.on('data',function(message){ console.log(message);});client.on('close', function( ){ console.log( 'server disconnected');}); process.stdin.on("readable",()=>{ var msg = process.stdin.read(); if(msg !=null){ client.write(msg); } });
2017年05月14日 05点05分
4
level 2
用的是net模块写的很简单的一个聊天程序
虽然很简单但是对于我一个本身才接触编程一个月的人来说极为不易
2017年05月14日 05点05分
5
level 2
如果有跟我一样的情况想学nodejs的伙伴们 咋们一起前进吧
2017年05月14日 05点05分
6
level 2
现在楼主还在不断地完善这个聊天器。欢迎各位大神指教分享初学经验
2017年05月14日 05点05分
7
level 2
我的聊天服务器 又更新了 这次新加入了 私聊 和历史消息推送
2017年05月15日 05点05分
8
level 2
var net = require("net");
var events=require('events');
var fs=require('fs');
var emitter=new events.EventEmitter();
var count=0;var baseId = 1000;
var clientSockets = [];
var clientSocketsMap={};
var chatMsgs=[];
var server = net.createServer(function(socket){ count++; baseId++; console.log('在线人数共'+count+'人')
var name='client'+baseId;
socket.userName = name;
socket.userId = baseId;
clientSockets.push(socket);
clientSocketsMap[socket.userId]=socket;
console.log(name+' connected');
socket.setEncoding('utf8');
socket.on('data', function(data){
if(data.indexOf(':')==10){
var to=data.slice(6,10);
if( clientSocketsMap[to] ){
var go=data.slice(11,data.length)
clientSocketsMap[to].write(name+' say:'+go) };
}
else{
for(var i=0;i<clientSockets.length;i++){
var socket=clientSockets[i];
if(name==clientSockets[i].userName){
}
else{
socket.write(name+" say: "+data) };
};
}
if(data.indexOf(':')==10){
}
else{
chatMsgs.push(name+' say:'+data);
fs.appendFile('./msg.txt',chatMsgs.toString() ,function(err){ if(err){
throw err }
});
}
console.log( name+' say:'+ data);
});
fs.readFile('./msg.txt',function(err,data){
if(err){ throw err }
socket.write(data) })
socket.on('error', function(){
count--;
console.log(name+'disconnected');
console.log('在线人数共'+count+'人');
var index = clientSockets.indexOf(socket);
if(index != -1){ clientSockets.splice(index,1); }
delete clientSocketsMap[socket.userId]; });});
server.listen(8080, function(){ console.log(' server at port 8080');});
2017年05月15日 05点05分
9
level 2
这个聊天服务器就算是做完了吧
接下来开始新任务.......
2017年05月15日 05点05分
10
level 2
新任务终于开始了
这次任务应该就是以上面的聊天服务器为框架,写一个比大小的小游戏
2017年05月18日 05点05分
14
level 2
游戏规则:当几个玩家连接服务器是 返回欢迎 和 按@键进入游戏,当所有玩家输入@时,服务器给指定玩家随机生成0到100的随机数,并返回给玩家 自己的数字和最大数字和最大数字的玩家。最后再是准备,返回按@键进入游戏.......
2017年05月18日 05点05分
15