从go程序中发消息给winform(C#)
背景:
1、服务端语言为GO,客户端语言为:C#(WinForm);
2、在客户端操执行长耗时任务时,服务器应该将后台日志或定时将心跳信息及时传递给客户端,这样方便用户查看服务器执行情况(重要)。
一、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";//要其它机器访问,则不能用本机 string addrStr = "192.168.17.101"; IPAddress iPAddress = Dns.GetHostAddresses(addrStr)[0]; TcpListener server = new TcpListener(iPAddress, 8888); 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}:8888", 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:8888/") client2 := rpc.NewClient("tcp4://192.168.17.101:8888/") prosumer2 := push.NewProsumer(client2, "发送方1") time.Sleep(time.Millisecond * 100) prosumer2.Push("人来了1a", "log_msg", "C#") prosumer2.Push("人来了2c", "log_msg", "C#") } /* https://github.com/hprose/hprose-golang/blob/v3/rpc/rpc_test.go#L768 包:github.com/hprose/hprose-golang/v3 */
本文来自博客园,作者:xiaoyongdata(微信号:xiaoyongdata),转载请注明原文链接:https://www.cnblogs.com/xiaoyongdata/p/15505821.html