go语言学习==》简易socket客户端服务端通信收发、redis订阅消息,get、set数据
- redis操作
conn.Do()里面执行redis控制台命令
conn, _ := redis.Dial("tcp", "127.0.0.1:6379")
conn.Do("SET", "keyString", "I am string")
启动服务cmd命令:
redis-server.exe redis.windows.conf
连接redis命令
Redis-cli.exe
demo收发订阅发布消息
package main
import (
"github.com/garyburd/redigo/redis"
"fmt"
"time"
)
func Send(){//发布消息
//连接
conn, _ := redis.Dial("tcp", "127.0.0.1:6379")
defer conn.Close()
//放置string类型数据
conn.Do("SET", "keyString", "I am string")
//发布放置了string数据的消息
_,err := conn.Do("PUBLISH", "channel1", "keyString")
if err != nil {
fmt.Println("publish err: ", err)
return
}
//放置int类型数据
conn.Do("SET", "keyInt", 99)
//发布放置了string数据的消息
_,err = conn.Do("PUBLISH", "channel1", "keyInt")
if err != nil {
fmt.Println("publish err: ", err)
return
}
}
func Receiver(){//订阅消息
//连接
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
defer conn.Close()
if err != nil {
fmt.Println("connect redis error :", err)
return
}
defer conn.Close()
psc := redis.PubSubConn{conn}
psc.Subscribe("channel1") //订阅channel1频道
for {
switch v := psc.Receive().(type) {
case redis.Message:
fmt.Printf("\n%s接收到一个放置%s的消息\n", v.Channel, v.Data)
conn1,_ := redis.Dial("tcp","127.0.0.1:6379")
str:=string(v.Data)
value,_:=redis.String(conn1.Do("GET", str))
fmt.Println("值为:",value)
case redis.Subscription:
fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
case error:
fmt.Println(v)
return
}
}
}
func main() {
go Send()
go Receiver()
time.Sleep(time.Second*10)
}
简易:socket聊天通信demo
server端
package main
import (
"net"
"fmt"
"bufio"
)
//服务端实现
func server(){
//tcp监听8888端口
lis, _ := net.Listen("tcp", "localhost:8888")
//接受8888端口的连接
conn, _ := lis.Accept()
//循环监听并且操作8888端口
for {
//监听客户端发来的消息
msg, _ := bufio.NewReader(conn).ReadString('\n')
//输出客户端消息
fmt.Print("收到消息:", string(msg))
//发送消息给客户端
conn.Write([]byte("我是服务器" + "\n"))
}
}
func main() {
server()
}
client端
package main
import (
"net"
"fmt"
"bufio"
"os"
)
func client() {
//连接到8888端口
conn, _ := net.Dial("tcp", "localhost:8888")
//循环监听并且操作8888端口
for {
//获取控制台输入句柄
reader := bufio.NewReader(os.Stdin)
fmt.Print("请输入文本: ")
//从控制台读取string
text, _ := reader.ReadString('\n')
//发送文本
fmt.Fprintf(conn, text + "\n")
//监听是否发送成功(监听服务器发来的消息)
msg, _ := bufio.NewReader(conn).ReadString('\n')
fmt.Print("服务器传来的消息: "+msg)
}
}
func main() {
client()
}