Net Core教程

从go程序中发消息给winform(C#)

本文主要是介绍从go程序中发消息给winform(C#),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

背景:服务端语言为GO,客户端语言为:C#(WinForm);在客户端操作后,服务器会产生一些消息,需要将这些消息实时的传递给客户端。

一、C#核心代码

using Hprose.RPC;
using Hprose.RPC.Plugins.Log;
using Hprose.RPC.Plugins.Push;
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace win_push_msg_client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void 测试ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            callAppendLog("开始");

            Task.Factory.StartNew(() =>
            {
                try
                {
                    #region
                    // 服务端启动
                    string addrStr = "127.0.0.1";
                    IPAddress iPAddress = Dns.GetHostAddresses(addrStr)[0];
                    TcpListener server = new TcpListener(iPAddress, 8899);
                    server.Start();
                    var service = new Broker(new Service()).Service;
                    ServiceCodec.Instance.Debug = true;
                    service.Use(Log.IOHandler)
                           .Use(Log.InvokeHandler)
                           .Bind(server);
                    // 启动订阅服务
                    var client = new Client(string.Format("tcp4://{0}:8899", addrStr));
                    var prosumer = new Prosumer(client, "C#");
                    prosumer.OnSubscribe += (topic) => {
                        this.callAppendLog(topic + " 订阅成功.");
                    };
                    prosumer.OnUnsubscribe += (topic) => {
                        this.callAppendLog(topic + " 取消订阅成功");
                    };
                    prosumer.Subscribe<string>("log_msg", (data) => {
                        this.callAppendLog(data);
                    });
                    this.callAppendLog("已订阅主题:log_msg");

                    #endregion
                }
                catch (Exception ex)
                {
                    this.callAppendLog(ex.Message);
                }
            });
        }

        private void callAppendLog(string msg)
        {
            this.Invoke(new Action(() => {
                this.richTextBox1.AppendText(msg);
                this.richTextBox1.AppendText("\n");
            }));
        }
    }
}

  

 

二、GO核心代码:

package main

import (
    "github.com/hprose/hprose-golang/v3/rpc"
    "github.com/hprose/hprose-golang/v3/rpc/plugins/push"
    "time"
)

func main()  {
    client2 := rpc.NewClient("tcp4://127.0.0.1:8899/")
    prosumer2 := push.NewProsumer(client2, "发送方1")
    time.Sleep(time.Millisecond * 100)
    prosumer2.Push("人来了1a", "log_msg", "C#")
    prosumer2.Push("人来了2c", "log_msg", "C#")
}
View Code

 

这篇关于从go程序中发消息给winform(C#)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!