SwiftNIO IRC Web 客户端

Swift4 Swift5 macOS tuxOS

这是一个非常简单的基于 WebSocket 的 IRC WebClient/Server。

它包含一个小型聊天 web 应用程序作为前端(一个用纯 JavaScript 编写的单页 web 应用程序,没有框架),它包含一个使用 SwiftNIO IRC 客户端模块 的 WebSocket/IRC 桥接,以及一个小型 HTTP 服务器,用于交付 web 应用程序并充当 websocket 端点。

这个 WebClient 是一个常规的 Swift 包,可以导入到其他 Swift 服务器中!

它看起来像什么

从表面上看,它是一个非常简单的聊天 web 应用程序,具有对频道和直接消息的基本支持

有时一个实时演示安装运行在 http://irc.noze.io/ 上。 一旦滥用开始发生,我们可能不得不关闭它 :-) 如果它没有运行,并且你想试用它,只需在本地安装它,使用 MiniIRCd 只需要几分钟。

概述

Swift NIO 部分

此模块包含中间部分,即 web 服务器。 它有两个用途

  1. 将客户端 (JavaScript) web 应用程序交付到浏览器(单页,HTML + CSS + JS)。
  2. 作为 WebSocket 连接的 HTTP 端点。 如果 JS web 应用程序创建 WebSocket 连接,它将联系 HTTP 服务器,然后 HTTP 服务器会将 HTTP 连接升级到 WebSocket 协议。
                            ┌───────────────────────┐
               HTML         │  ┌─────────────────┐  │
        ┌───────JS──────────┼──│ NIO HTTP Server │  │
        │                   │  └─────────────────┘  │
        │                   │           │           │
        ▼                   │       Upgrades        │
┌──────────────┐            │      Connection       │
│              │            │           │           │
│  WebBrowser  │            │           ▼           │       ┌──────────────┐
│              │  WebSocket │  ┌─────────────────┐  │       │              │
│  JavaScript  │◀────JSON───┼─▶│  NIO WebSocket  │◀─┼─IRC──▶│  IRC Server  │
│    WebApp    │            │  └─────────────────┘  │       │              │
│              │            │       WebServer       │       └──────────────┘
└──────────────┘            └───────────────────────┘

JavaScript 客户端

JavaScript web 应用程序嵌入到编译后的 Swift 模块中(使用 Makefile,所有资源都捆绑到一个 单个 Swift 源文件 中)。 然而,它也可以作为独立的 web 应用程序工作(你可以将 Client.html 拖到你的浏览器中)。

客户端应用程序位于 Sources/IRCWebClient/WebApp 中。

使用 Swift Package Manager 导入模块

一个示例 Package.swift 导入必要的模块

// swift-tools-version:5.0

import PackageDescription

let package = Package(
    name: "MyOwnIRCServer",
    dependencies: [
        .package(url: "https://github.com/NozeIO/swift-nio-irc-webclient.git",
                 from: "0.7.0")
    ],
    targets: [
        .target(name: "MyIRCServer",
                dependencies: [ "IRCServer", "IRCWebClient" ])
    ]
)

使用服务器

let webServer = IRCWebClientServer()
webServer.listen()

查看 Configuration 对象以获取支持的配置选项。

可以配置三个连接参数

  1. host/port - 这是 HTTP 服务器正在运行的地址
  2. ircHost/port - 这是 IRC 服务器的地址
  3. externalHost/port - 浏览器用于连接到 HTTP 服务器的地址。 通常但不一定与 1 相同。

ZeeZide 为您带来。 我们喜欢 反馈、GitHub 星星、酷炫的 合同工作,大概任何你能想到的赞扬形式。