一笑·科奉

node.js/socket.io与IIS共用80端口实现即时聊天

作者: 一笑, 写于: 2017-09-10 13:45:25

1、安装node.js

官网下载:https://nodejs.org/en/download/ 

如果觉得网速太慢,可以在中文网下载:http://nodejs.cn/download/

2、安装iisnode

如果node/express想和IIS公用80口提供服务(我司服务器仅能开80口对外),就需要安装IISNode,让IIS也可以运行node.js

下载源码:https://github.com/tjanczuk/iisnode

也可以直接下载exe:https://github.com/azure/iisnode/wiki/iisnode-releases 

image.png

image.png

3、新增项目目录和IIS站点:D:\websocket

4、安装socket.io

先打开cmd.exe,并定位到项目根目录(如:D:\websocket)

cd d:\websocket

然后安装

npm install socket.io

也可以使用全局安装,安装到node.js固定目录(不加-g就直接装在项目目录)

npm install -g socket.io

6、安装express

npm install express

8、安装IIS的URL重写组件

下载:http://www.iis.net/download/URLRewrite 

9、配置IIS站点

<configuration>
<system.webServer>
  <!-- 设置驱动程序目录(可省略,但公司服务器省略后报错) -->
  <iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade"  nodeProcessCommandLine="C:\Program Files\nodejs\node.exe"/>
  <!-- iisnode解析哪个文件,可使用*.js -->
<handlers>
<add name="iisnode" path="app.js" verb="*" modules="iisnode" />
</handlers>
  <!-- 当直接访问站点时,直接转向app.js -->
<rewrite>
<rules>
    <rule name="myapp">
        <match url="/*" />
        <action type="Rewrite" url="app.js" />
    </rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

10、环境已经搭建好,接下来就是写使用node.js/socket.io来实现即时聊天,其实这一步最简单

使用方法可以参考此网页:https://socket.io/docs/

Server(app.js) - 需要在node.js中执行的

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(80);

function handler (req, res) {
    fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.on('connection', function (socket) {
 socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

Client(index.js)

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>


分类: 未分类, 浏览: 486, 评论: 0
原创文章转载请注明:转自《一笑·科奉》 原文地址:https://www.kefong.com/post/9.html