JavaEE秒杀系统企业级实战应用视频

nodejs搭建的web模块主要负责接收视频信息,转发视频信息,唯一复杂的地方在于要记录每一个与服务器建立了连接的客户端,将图像发送给相应的每个客户端,这里我使用了一个全局对象构造的连接池,请看代码

 
  1. //加载配置文件

  2. var config = require("./config");

  3. //引入http模块

  4. var httpServer = require("http");

  5. //引入UDP模块

  6. var dgram = require("dgram");

  7. var net = require('net');

  8. //引入path模块

  9. var path = require('path');

  10. //引入express模块

  11. var express = require('express');

  12. //引入express模块

  13. var app = express();

  14. var http = httpServer.Server(app);

  15. //初始化socket连接

  16. var io = require("socket.io")(http);

  17. var serverSocket = dgram.createSocket("udp4");

  18. serverSocket.bind(config.udpImagePort);

  19. //初始化连接池

  20. var connections = {};

  21. var connectionid = new Set();

  22. //初始化全局变量

  23. var isWarning = true;

  24. app.use(express.static(path.join(__dirname, 'public')));

  25. app.set("views",path.join(__dirname,"views"));

  26. app.set("view engine","html");

  27. app.engine(".html",require("ejs").__express);

  28. app.get("/",function(req,res){

  29. res.render("camera.html");

  30. })

  31. //监听websocket连接

  32. console.info("开始websocket监听...")

  33. io.on("connection",function(socket){

  34. //监听到连接时,将socket加入连接池中

  35. socket.send("连接成功");

  36. connections[socket.id] = socket;

  37. connectionid.add(socket.id);

  38. console.info("增加一个连接,当前连接数量为"+connectionid.size)

  39. //获得来自网页的视频设置信息

  40. //断开连接时,将连接从连接池中删除

  41. socket.on("disconnect",function(){

  42. delete connections[socket.id];

  43. connectionid.delete(socket.id);

  44. console.info("删除一个连接,当前连接数量为"+connectionid.size);

  45. });

  46. })

  47. //监听udp连接,如果有画面,将画面广播出去

  48. serverSocket.on("message",function(msg,info){

  49. for(var a of connectionid){

  50. connections[a].send(msg);

  51. }

  52. });

  53.  
  54. //开启应用

  55. http.listen(config.listenPort,function(socket){

  56. console.info("listening on "+config.listenPort);

  57. });

猜你喜欢

转载自blog.csdn.net/sb152866/article/details/81393825