实现思路:客户端js连接了nodejs服务,通过.net连接nodejs服务,通过.net发送消息到nodejs,然后通过nodejs将消息推送给(用户)客户端

1、先下载nodejs安装,至于怎么安装nodejs网上很多说明,这里就不做说明了

2、下载SocketIO4Net

SocketIO4Net开源项目结构如下:

nodejs即时通讯模块+SocketIO4Net的使用小结

进入项目的目录:socketio4net-develop\samples\node.server 如图下图:

nodejs即时通讯模块+SocketIO4Net的使用小结

双击先 install.cmd运行这个文件安装nodejs需要的模块(这个步骤需要在已经连接网络下进行),在双击运行startServer.cmd文件启动nodejs服务,服务启动成功入下图:

nodejs即时通讯模块+SocketIO4Net的使用小结

使用nodejs可以快速搭建一个即时通讯的聊天室下载请点这里

使用下载SocketIO4Net开源类库可以快速链接nodejs通讯服务进行交互通讯

SocketIO4Net的项目里面有个控制台Console_Events项目下有个EventClient.cs类,进行二次开发主要参照这个类的写法去开发,加入自己的逻辑

我做测试修改的EventClient.cs类的代码如下:

using System;
using System.Diagnostics;
using System.Threading;
using SocketIOClient;
using Newtonsoft.Json.Linq;
using System.Linq;
using System.Text.RegularExpressions;
using SocketIOClient.Messages;
using System.Net;

namespace ConsoleEvents
{
    /// <summary>
    /// Example usage class for SocketIO4Net
    /// </summary>
    public class EventClient
    {
        Client socket;
        public void Execute()
        {
            Console.WriteLine("Starting SocketIO4Net Client Events Example...");

            socket = new Client("http://127.0.0.1:3000/")
            {
            }; // url to the nodejs / socket.io instance
            //socket.TransportPeferenceTypes.Add(TransportType.XhrPolling);
            socket.Opened += SocketOpened;
            socket.Message += SocketMessage;
            socket.SocketConnectionClosed += SocketConnectionClosed;
            socket.Error += SocketError;

            // Optional to add HandShake headers - comment out if you do not have use
            socket.HandShake.Headers.Add("OrganizationId", "1034");
            socket.HandShake.Headers.Add("UserId", "TestSample");
            socket.HandShake.Headers.Add("Cookie", "somekookie=magicValue");
            socket.HandShake.Headers.Add("token", "Fxt_ABCDEFGHIJKLMNOPQRSTUVWXYZ");

            // Register for all On Events published from the server - prior to connecting

            // register for 'connect' event with io server
            socket.On("connect", (fn) =>
            {
                Console.WriteLine("\r\nConnected event...{0}\r\n", socket.ioTransport.TransportType);
                socket.Emit("subscribe", new { room = "eventRoom" }); // client joins 'eventRoom' on server
            });


            // register for 'update' events - message is a json 'Part' object
            socket.On("update", (data) =>
            {
                Console.WriteLine("recv [socket].[update] event");
                Console.WriteLine("  raw message:      {0}", data.RawMessage);
                Console.WriteLine("  string message:   {0}", data.MessageText);
                Console.WriteLine("  json data string: {0}", data.Json.ToJsonString());
                // cast message as Part - use type cast helper
                Part part = data.Json.GetArgAs<Part>();
                Console.WriteLine(" PartNumber:   {0}\r\n", part.PartNumber);
            });

            // register for 'alerts' events - broadcast only to clients joined to 'Room1'
            socket.On("log", (data) =>
            {
                Console.WriteLine(" log: {0}", data.Json.ToJsonString());
            });
            socket.On("empty", (data) =>
            {
                Console.WriteLine(" message 'empty'");
            });
            //socket.Connect(SocketIOClient.TransportType.XhrPolling);
            socket.Connect();
        }

        public void SendMessageSamples()
        {

            // random examples of different styles of sending / recv payloads - will add to...
            //socket.Send(new TextMessage("Hello from C# !")); // send plain string message
            //socket.Emit("hello", new { msg = "My name is SocketIO4Net.Client!" }); // event w/string payload
            //socket.Emit("sendtodepartment", new { token = "Fxt_ABCDEFGHIJKLMNOPQRSTUVWXYZ", todepartmentids = "user_123_123,user_1234_1234,user_12345_12345", msg = "eeeeeeeeeeeeeeeeeeeeee" });
           // socket.Emit("sendtousers", new { token = "Fxt_ABCDEFGHIJKLMNOPQRSTUVWXYZ", touserids = "user_123w_123q,user_1234_1234,user_12345_12345", msg = "xxxxxxxxxxxxxxxxxxxxxxxxx" });
            socket.Emit("sendMsg", new { token = "qfefefedfwrfwefw4teryurtyewtwerwererererwe", UserId = "1", UserName = "test", msg = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" });
            //socket.Emit("heartbeat"); // event w/o data payload (nothing to do with socket.io heartbeat)
            
            //socket.Emit("hello", "simple string msg");
            //socket.Emit("partInfo", new { PartNumber = "AT80601000741AA", Code = "SLBEJ", Level = 1 }); // event w/json payload

            //Part newPart = new Part() { PartNumber = "K4P2G324EC", Code = "DDR2", Level = 1 };
            //socket.Emit("partInfo", newPart); // event w/json payload


            // callback using namespace example 
            //Console.WriteLine("Emit [socket.logger].[messageAck] - should recv callback [socket::logger].[messageAck]");
            //socket.Emit("messageAck", new { hello = "papa" }, "",
            //    (callback) =>
            //    {
            //        var jsonMsg = callback as JsonEncodedEventMessage; // callback will be of type JsonEncodedEventMessage, cast for intellisense
            //        Console.WriteLine(string.Format("callback [socket::logger].[messageAck]: {0} \r\n", jsonMsg.ToJsonString()));
            //    });
        }

        void SocketError(object sender, ErrorEventArgs e)
        {
            Console.WriteLine("socket client error:");
            Console.WriteLine(e.Message);
        }

        void SocketConnectionClosed(object sender, EventArgs e)
        {
            Console.WriteLine("WebSocketConnection was terminated!");
        }

        void SocketMessage(object sender, MessageEventArgs e)
        {
            // uncomment to show any non-registered messages
            if (string.IsNullOrEmpty(e.Message.Event))
                Console.WriteLine("Generic SocketMessage: {0}", e.Message.MessageText);
            else
                Console.WriteLine("Generic SocketMessage: {0} : {1}", e.Message.Event, e.Message.JsonEncodedMessage.ToJsonString());
        }

        void SocketOpened(object sender, EventArgs e)
        {

        }

        public void Close()
        {
            if (this.socket != null)
            {
                socket.Opened -= SocketOpened;
                socket.Message -= SocketMessage;
                socket.SocketConnectionClosed -= SocketConnectionClosed;
                socket.Error -= SocketError;
                this.socket.Dispose(); // close & dispose of socket client
            }
        }
    }

}
View Code

相关文章:

  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-19
猜你喜欢
  • 2021-12-26
  • 2022-12-23
  • 2021-07-02
相关资源
相似解决方案