提到Node,不能错过的是WebSocket协议。它与Node之间的配合堪称完美,其理由有两条。

1.WebSocket客户端基于时间的编程模型与Node中自定义事件相差无几。

2.WebSocket实现了客户端与服务端之间的长连接,而Node事件驱动的方式十分擅长与大量客户端保持高并发连接。

----《深入浅出Nodejs》

参考资料

GIT nodejs-socketio-chat

GIT socket.io

SocketIO4NetClient

在Node的学习过程中,最使我感兴趣的就是socket.io模块,在git上也有不少大牛做的node之间的访问模块,觉得大体上相差不多,有的区别在于使用方法和舒适度上,但经过node中很多知名模块的配合下,代码的整洁度已经让习惯顺序逻辑编程的人觉得很舒服,而且在适当的时候 根据自己的意愿使用并行,这种逻辑带来的快感 ,有时,是让开发者很爽的一件事。

再说会用vs连接node服务端时,使用socket.io模块就稍稍有些吃力,研究了两天,在网上找到SocketIO4NetClient。编译后是dll文件,在项目中可直接引用,在unity客户端里 放在项目根目录下就会自动解析,但在unity发布到不同的平台时,会出现一些问题,解决方法是将项目源码导入到unity项目中,经过unity编译后可以发布到各平台运行。

socket.io

node服务端

$npm install socket.io -g 

首先在命令行安装socket.io模块,如在项目中使用时报错“not found module socket.io”,则要在项目目录下执行$npm install socket.io,在项目根目录生成的 node_modules 里面会添加socket.io模块,并成功引用。

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

app.get('/', function (req, res) {
    res.end('welcome to socket demo ');
});

http.listen(, function () {
    console.log('server localhost:3000 is start');
});

为了便于配置,这里使用了express框架,提示找不到模块的 可以像安装socket.io模块方式,安装express。

代码中在访问根目录时候,会返回字符串 welcome to socket demo ,node将监听3000端口。

io.on('connection', function (socket) {
    socket.on('message', function (obj) {
        io.emit('message',obj);
    });
});

以上代码可以理解为,在服务端接收名称为 connection 访问时,在socket中 监听message事件,将传入的obj参数,推送给客户端。

c#客户端

首先将源码中的dll文件添加到项目引用中

{  Client socket = new Client("http://localhost:3000");

  socket.Opened += clien_Opened;
  socket.Message += clien_Message;
  socket.SocketConnectionClosed += clien_SocketConnectionClosed;
  socket.Error += clien_Error;

socket.On("connection", (fn) =>
{
Console.WriteLine("connect enevt start");

socket.Emit("messgae", reJson);
});

 socket.Connect();}

void clien_Error(object sender, ErrorEventArgs e)
{
Console.WriteLine("a error show"+e.Message);
}

void clien_SocketConnectionClosed(object sender, EventArgs e)
{
Console.WriteLine("socket connection succeed!");
}

void clien_Message(object sender, MessageEventArgs e)
{
if (e != null && e.Message.Event == "message")
{

}
}

void clien_Opened(object sender, EventArgs e)
{
Console.WriteLine("socket was open...");
}

c#SocketIO4NetClient访问node js的更多相关文章

  1. Node.js~在linux上的部署~外网不能访问node.js网站的解决方法

    这是上一篇node.js部署到linux上的后续文章,当我们安装完node.js之后,建立了sailsjs的网站,然后在外面电脑上无法访问这个网站,这个问题我们如何去解决? 解决思路: 查看linux ...

  2. Mac中安装node.js和npm

    换了Mac需要安装noed.js和npm记录一下首先访问node.js官网(https://nodejs.org/en/download/) 点击下载完后,一路点安装 就安装完成了 然后打开-终端-输 ...

  3. 在Sublime Text 3 中安装SublimeLinter,Node.js进行JS&CSS代码校验

    转载自:http://www.wiibil.com/website/sublimelinter-jshint-csslint.html 在Sublime Text中安装SublimeLinter,No ...

  4. 在 Ubuntu 14.04/15.04 上配置 Node JS v4.0.0

    大家好,Node.JS 4.0 发布了,这个流行的服务器端 JS 平台合并了 Node.js 和 io.js 的代码,4.0 版就是这两个项目结合的产物——现在合并为一个代码库.这次最主要的变化是 N ...

  5. Node.js 初探

    概念 Node.js 是构建在Chrome javascript runtime之上的平台,能够很容易的构建快速的,可伸缩性的网络应用程序.Node.js使用事件驱动,非阻塞I/O 模式,这使它能够更 ...

  6. node.js安装和启动

    在Windows上安装 Node.js十分方便,我们只需要访问node.js官网http://www.nodejs.org/,点击Download链接,然后选择Windows Installer(32 ...

  7. Node.js~在linux上的部署~pm2管理工具的使用

    之前写了两篇关于在linux上部署nodejs的文章,大家如果没有基础可以先看前两篇<Node.js~在linux上的部署>,<Node.js~在linux上的部署~外网不能访问no ...

  8. 编写原生Node.js模块

    导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  9. 编写原生的Node.js模块

    导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

随机推荐

  1. Swift 断言

    assert(条件,"输出信息"); 如: let age=-1; assert(age>=0,"age要大于0");

  2. jquery结合Highcharts插件实现动态数据仪表盘图形化显示效果

    仪表盘显示效果如图: 方法一效果图: 方法二效果图(插件版本4.0.1): ​ js代码如下: $(function(){ //方法一: var chart = new Highcharts.Char ...

  3. 解密电子书之一:电子墨水(eink)

    今日,关于电子书的话题不断,先是盛大抖了个攒,测试/定价/赔钱的营销策略引来多方质疑.而后汉王又抛出个8寸/800MHz/ARM A8的指标产品大打性能牌. 身为电子行业网站,与非网在时尚数码热潮面前 ...

  4. 十九、Android Activity初探

    原文:十九.Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供 ...

  5. Java用Dijkstra算法实现地图两点的最短路径查询(Android版)

    地图上实现最短路径的查询,据我了解的,一般用Dijkstra算法和A*算法来实现.由于这是一个课程项目,时间比较急,而且自己不熟悉A*算法,所以参考网上的Dijkstra算法(http://blog. ...

  6. String类的实现,内部采用字符数组实现

    #include <iostream> using namespace std; class String{ public: String(const char *str = NULL); ...

  7. 【POJ】2492 A bug's life ——种类并查集

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 28211   Accepted: 9177 De ...

  8. python setattr(),getattr()函数

    setattr(object,name,value): 作用:设置object的名称为name(type:string)的属性的属性值为value,属性name可以是已存在属性也可以是新属性. get ...

  9. 关于cocos2d安装时编译不成功(个人心得)

    在解压cocos2d执行vs2010.sln时错误发生不能成功生成.遇到这样的错误: 1>c:\program files\microsoft sdks\windows\v7.0a\includ ...

  10. Ext.Net 使用总结之GridPanel中的选中行

    1.判断GridPanel中是否选中了某行 if (!GridPanel1.hasSelection()) { Ext.Msg.alert("提示", "请选择记录!&q ...