1. uuid

1.1.1. 什么是uuid?

uuid是Universally Unique Identifier的缩写,即通用唯一识别码。

uuid的目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 uuid。

A universally unique identifier (UUID) is a 128-bit number used to identify information in computer systems.

例如java中生成uuid:

  1. package com.mytest;
  2. import java.util.UUID;
  3. public class UTest {
  4. public static void main(String[] args) {
  5. UUID uuid = UUID.randomUUID();
  6. System.out.println(uuid);
  7. }}

c++中生成uuid:

  1. #pragma comment(lib, "rpcrt4.lib")
  2. #include <windows.h>
  3. #include <iostream>
  4. using namespace std;
  5. int main()
  6. {
  7. UUID uuid;
  8. UuidCreate(&uuid);
  9. char *str;
  10. UuidToStringA(&uuid, (RPC_CSTR*)&str);
  11. cout<<str<<endl;
  12. RpcStringFreeA((RPC_CSTR*)&str);
  13. return 0;
  14. }

go生成uuid:

目前,golang中的uuid还没有纳入标准库,我们使用github上的开源库:

  1. go get -u github.com/satori/go.uuid

使用:

  1. package main
  2. import (
  3. "fmt"
  4. uuid "github.com/satori/go.uuid"
  5. )
  6. func main() {
  7. // 创建
  8. u1, _ := uuid.NewV4()
  9. fmt.Printf("UUIDv4: %s\n", u1)
  10. // 解析
  11. u2, err := uuid.FromString("f5394eef-e576-4709-9e4b-a7c231bd34a4")
  12. if err != nil {
  13. fmt.Printf("Something gone wrong: %s", err)
  14. return
  15. }
  16. fmt.Printf("Successfully parsed: %s", u2)
  17. }

uuid在websocket中使用

这里就是一个简单的使用而已,在websocket中为每一个连接的客户端分配一个uuid。

golang中可以使用github.com/gorilla/websocket为我们提供的websocket开发包。

声明一个客户端结构体:

  1. type Client struct {
  2. id string
  3. socket *websocket.Conn
  4. send chan []byte
  5. }

使用:

  1. client := &Client{id: uuid.NewV4().String(), socket: conn, send: make(chan []byte)}