zoukankan      html  css  js  c++  java
  • Golang websocket 实现消息推送

    服务端实现

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    	
    	"golang.org/x/net/websocket"
    )
    
    func add(ws *websocket.Conn) {
    	msg := make([]byte, 512)
    	n, err := ws.Read(msg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Receive: %s
    ", msg[:n])
    
    	sendMsg := "订单添加:" + string(msg[:n])
    	_, err = ws.Write([]byte(sendMsg))
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Send: %s
    ", sendMsg)
    }
    
    func del(ws *websocket.Conn) {
    	var msg string
    	err := websocket.Message.Receive(ws, &msg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Receive: %s
    ", msg)
    
    	sendMsg := "订单删除:" + msg
    	err = websocket.Message.Send(ws, sendMsg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Send: %s
    ", sendMsg)
    }
    
    func main() {
    	http.Handle("/add", websocket.Handler(add))
    	http.Handle("/del", websocket.Handler(del))
    	fmt.Println("开始监听8888端口...")
    	err := http.ListenAndServe(":8888", nil)
    	if err != nil {
    		log.Fatal(err)
    	}
    }
    

    客户端实现

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    
    	"golang.org/x/net/websocket"
    )
    
    func add(param string) {
    	ws, err := websocket.Dial("ws://127.0.0.1:8888/add", "", "http://127.0.0.1:8888/")
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer ws.Close() //关闭连接
    
    	sendMsg := []byte(param)
    	_, err = ws.Write(sendMsg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Send: %s
    ", string(sendMsg))
    
    	msg := make([]byte, 512)
    	m, err := ws.Read(msg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Receive: %s
    ", msg[:m])
    }
    
    func del(param string) {
    	ws, err := websocket.Dial("ws://127.0.0.1:8888/del", "", "http://127.0.0.1:8888/")
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer ws.Close() //关闭连接
    
    	sendMsg := param
    	err = websocket.Message.Send(ws, sendMsg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Send: %s
    ", sendMsg)
    
    	var msg string
    	err = websocket.Message.Receive(ws, &msg)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Receive: %s
    ", msg)
    }
    
    func main() {
    	add("小龙虾")
    	add("鱼香肉丝")
    	del("小龙虾")
    }
    

    测试

    启动服务端代码:
    在这里插入图片描述
    运行客户端代码:
    在这里插入图片描述

    服务端逻辑处理:
    在这里插入图片描述
    这里客户端是用后端代码实现,当需要前端页面与服务端进行交互时,可以将客户端改成页面请求调用,收到消息后显示即可。

    公众号:李田路口

  • 相关阅读:
    android常用组件
    android button点击效果
    service+activity
    收藏
    c++
    工厂模式
    lr常遇到一些问题
    lr介绍
    ((1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1"))
    mysqlclient 1.4.0 or newer is required; you have 0.10.0
  • 原文地址:https://www.cnblogs.com/dubinyang/p/13977392.html
Copyright © 2011-2022 走看看