go--microSocket服务端 php客户端

go服务端 使用 microSocket
package main

import (
   "encoding/json"
   "log"
   "net"
   msf "github.com/mistaker/microSocket"
)

var ser = msf.NewMsf(&msf.CommSocket{})

//框架事件
//----------------------------------------------------------------------------------------------------------------------
type event struct {
}

//客户端握手成功事件
func (this event) OnHandel(fd uint32, conn net.Conn) bool {
   log.Println(fd, "链接成功类")
   return true
}

//断开连接事件
func (this event) OnClose(fd uint32) {
   log.Println(fd, "链接断开类")
}

//接收到消息事件
func (this event) OnMessage(fd uint32, msg map[string]string) bool {
   /*接收数据  module:test|action:Hello|method:Downpower|data:1111*/
   log.Println("这个是接受消息事件",msg)

   resData :=map[string]string{
      "key":msg["module"],
      "val":"Hello",
   }
   stu,_ := json.Marshal(&resData)
   a := []byte(string(stu))
   /*响应json字符串  {"key":"test","val":"Hello"}*/
   ser.SessionMaster.WriteByid(fd,a)
   return true
}
//----------------------------------------------------------------------------------------------------------------------
//框架业务逻辑
type Task struct {
}

func (this Task) Default(fd uint32,data map[string]string) bool {
   log.Println("default")
   return true
}

func (this Task) BeforeRequest(fd uint32,data map[string]string) bool {
   log.Println("before")
   return true
}

func (this Task) AfterRequest(fd uint32,data map[string]string) bool{
   log.Println("after")
   return true
}
func (this Task) Hello(fd uint32,data map[string]string) bool {
   log.Println("收到消息了")
   log.Println(data)
   ser.SessionMaster.WriteByid(fd,[]byte("hehehehehehehehe"))
   return true
}

func (this Task) Hs(fd uint32,data map[string]string) bool {
   resData :=map[string]string{
      "key":data["module"],
      "val":"Hello,World!",
   }
   stu,_ := json.Marshal(&resData)
   a := []byte(string(stu))
   /*响应json字符串  {"key":"test","val":"Hello"}*/
   ser.SessionMaster.WriteByid(fd,a)
   //ser.SessionMaster.WriteByid(fd,[]byte("Hello,World!"))
   //ser.SessionMaster.DelSessionById(fd) //关闭连接

   return true
}

//----------------------------------------------------------------------------------------------------------------------
func main() {
   log.SetFlags(log.Lshortfile | log.LstdFlags | log.Llongfile)
   ser.EventPool.RegisterEvent(&event{})
   ser.EventPool.RegisterStructFun("ts", &Task{})
   ser.Listening(":6565")
   //go ser.Listening(":6565")
}

go客户端

package main

import (
   //"encoding/json"
   "fmt"
   _ "fmt"
   "net"
   ms "github.com/mistaker/microSocket"
   "github.com/mistaker/microSocket/util"
)

func main() {
   conn, err := net.Dial("tcp", "192.168.199.59:6565")
   if err != nil {
      return
   }
// defer conn.Close()

   data := make(map[string]string)

   data["module"] = "ts"
   data["method"] = "Hs"
   sock := &ms.CommSocket{}

   data["data"] = "1111"
   //把map转化为string
   a := []byte(util.Map2String(data))
   //把string打包
   //sock := &ms.CommSocket{}
   b := sock.Pack(a)
   fmt.Println(b)
   //发送数据
   conn.Write(b)




   /*接受响应数据*/
   buff := make([]byte, 1000000)
   n,redErr :=conn.Read(buff)
   if redErr !=nil{
      fmt.Println("Read failed:", redErr)
   }
   if string(buff[:6]) != "Header" {/*如果header不是 指定的header 说明此数据已经被污染 直接不要*/
      fmt.Println("Read Header Err !")
   }
   if len(buff) < 10 {/*包头有10个字节占位 Header+空字节*/
      fmt.Println("pack Header Err !")
   }
   fmt.Println(string(buff[10:n]))


}
php客户端测试
<?php
ini_set('display_errors',1);
set_time_limit(0);

$data ="module:ts|method:Hello";/*首次请求携带参数*/
$data1 ="module:ts|method:Hs|data:333333";/*发送消息*/
$result ="Header".pack('N', strlen($data)).$data;

$host = "192.168.199.59";
$port = 6565;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n");
$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");
socket_write($socket, $result) or die("Write failed\n");

//sleep(5);    //机器运算要比网络传输快几百倍,服务器还没有返回数据呢就已经开始运行了,当然就收的是空值了
$i =0;
while ($buff = socket_read($socket, 10240000)) {
    if ($i >= 3){break;}
    echo("Response was:" . $buff . "\n");
    echo("input what you want to say to the server:\n");
    $result1 ="Header".pack('N', strlen($data1)).$data1;
    socket_write($socket, $result1);
    $i ++;
}
socket_close($socket);

猜你喜欢

转载自blog.csdn.net/lctmei/article/details/115007433