web socket基础调研

81 阅读1分钟
  1. 使用ali的fc。创建http触发器,使用websocket触发。

image.png

const WebSocket = require('ws');

const WebSocketServer = WebSocket.Server;

const wss = new WebSocketServer({
  host: "0.0.0.0",
  port: 9000,
});

wss.on('connection', function (ws, req) {
  console.log(`[SERVER] connection()`);
  ws.on('message', function (message) {
    ws.send(`${message} 11111`, (err) => {
      if (err) {
        console.log(`[SERVER] error: ${err}`);
      }
    });

    ws.send(`${message} 222`, (err) => {
      if (err) {
        console.log(`[SERVER] error: ${err}`);
      }
    });

    ws.send(`${message} 333`, (err) => {
      if (err) {
        console.log(`[SERVER] error: ${err}`);
      }
    });
  })
});

实际触发器调用效果:

package main

import (
   "bufio"
   "fmt"
   "github.com/gorilla/websocket"
   "log"
   "os"
)

func main() {
   dl := websocket.Dialer{
      // NetDial:           nil,
      // NetDialContext:    nil,
      // NetDialTLSContext: nil,
      // Proxy:             nil,
      // TLSClientConfig:   nil,
      // HandshakeTimeout:  0,
      // ReadBufferSize:    0, // 重要
      // WriteBufferSize:   0, // 重要
      // WriteBufferPool:   nil,
      // Subprotocols:      nil,
      // EnableCompression: false,
      // Jar:               nil,
   }
   conn, _, err := dl.Dial("ws://websocket-websocket-wxobdeobpf.cn-hangzhou.fcapp.run", nil) // 返回连接,http响应,错误
   if err != nil {
      log.Println(err)
      return
   }
   go send(conn)
   for {
      messageType, content, err := conn.ReadMessage()
      if err != nil {
         break
      }
      fmt.Println(messageType, string(content))
   }
}

func send(conn *websocket.Conn) {
   for {
      reader := bufio.NewReader(os.Stdin)
      l, _, _ := reader.ReadLine()
      conn.WriteMessage(websocket.TextMessage, l)
   }
}

image.png

超过超时时间,链接就断掉了

image.png