1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mredencom-netpollmux

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Package netpollmux реализует сетевой опросчик на основе epoll/kqueue.

Особенности:

  • Epoll/kqueue;
  • TCP/UNIX;
  • Совместимость с интерфейсом net.Conn;
  • Обновление соединения;
  • Неблокирующий ввод-вывод;
  • Splice/sendfile;
  • Перепланирование рабочих процессов.

Сравнение с другими пакетами:

Пакет net netpollmux gnet evio
Низкое использование памяти Нет Да Да Да
Неблокирующий ввод-вывод Нет Да Да Да
Splice/sendfile Да Да Нет Нет
Перепланирование Да Да Нет Нет
Совместимость с интерфейсом net.Conn Да Да Нет Нет

Benchmark

mock 0msmock 1ms

Начало работы:

Установка:

go get github.com/php2go/netpollmux

Импорт:

import "github.com/php2go/netpollmux"

Использование:

Простой пример:

package main

import "github.com/php2go/netpollmux"

func main() {
	var handler = &netpoll.DataHandler{
		NoShared:   true,
		NoCopy:     true,
		BufferSize: 1024,
		HandlerFunc: func(req []byte) (res []byte) {
			res = req
			return
		},
	}
	if err := netpoll.ListenAndServe("tcp", ":9999", handler); err != nil {
		panic(err)
	}
}

Пример TLS:

package main

import (
	"crypto/tls"
	"github.com/php2go/netpollmux/internal/socket"
	"github.com/php2go/netpollmux/netpoll"
	"net"
)

func main() {
	var handler = &netpoll.DataHandler{
		NoShared:   true,
		NoCopy:     true,
		BufferSize: 1024,
		HandlerFunc: func(req []byte) (res []byte) {
			res = req
			return
		},
	}
	handler.SetUpgrade(func(conn net.Conn) (net.Conn, error) {
		tlsConn := tls.Server(conn, socket.DefalutTLSConfig())
		if err := tlsConn.Handshake(); err != nil {
			return nil, err
		}
		return tlsConn, nil
	})
	if err := netpoll.ListenAndServe("tcp", ":9999", handler); err != nil {
		panic(err)
	}
}

Пример WebSocket:

package main

import (
	"github.com/php2go/netpollmux/internal/websocket"
	"github.com/php2go/netpollmux/netpoll"
	"net"
)

func main() {
	var handler = &netpoll.ConnHandler{}
	handler.SetUpgrade(func(conn net.Conn) (netpoll.Context, error) {
		return websocket.Upgrade(conn, nil)
	})
	handler.SetServe(func(context netpoll.Context) error {
		ws := context.(*websocket.Conn)
		msg, err := ws.ReadMessage()
		if err != nil {
			return err
		}
		return ws.WriteMessage(msg)
	})
	if err := netpoll.ListenAndServe("tcp", ":9999", handler); err != nil {
		panic(err)
	}
}

HTTP-пример:

package main

import (
	"bufio"
	"log"
	"net"
	"net/http"
	"sync"

	"github.com/php2go/netpollmux/internal/logger"
	"github.com/php2go/netpollmux/mux"
	"github.com/php2go/netpollmux/netpoll"
)

func main() {
	m := mux.NewRoute()
	m.GET("/hello/:id", func(w http.ResponseWriter, req *http.Request, params httprouter.Params) {
		pp := req.URL.Query()
		logger.Info("query params:", params, pp)
		mux.JSON(w, req, []string{"hello world"}, http.StatusOK)
	})
	log.Fatal(m.Run(":8080"))
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

**netpollmux** реализовал сетевой опросчик на основе **epoll/kqueue**. Развернуть Свернуть
Go
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mredencom-netpollmux.git
git@api.gitlife.ru:oschina-mirror/mredencom-netpollmux.git
oschina-mirror
mredencom-netpollmux
mredencom-netpollmux
main