小编Chr*_*ckx的帖子

如何仅使用websockets将Java客户端连接到SignalR Hub?

我需要从我的Java桌面应用程序访问与SignalR Hub一起运行的websocket服务器.

  • 一个图书馆正是这样做的,但它已经死了.有很多问题和拉取请求,自2015年以来尚未更新.
  • 我还找到了另一个库,但据我所知,它只适用于Android项目.
  • 我发现了一个SO问题,它说可以通过一些变通方法直接与SignalR服务器(标准websocket调用)对话,但是给定的链接已经死了.

当我尝试使用websocket直接访问服务器时,HTTP握手失败(我得到HTTP 200而不是101).

有人可以帮忙吗?

java websocket signalr signalr-hub java-websocket

6
推荐指数
1
解决办法
2936
查看次数

如何向本机库添加功能,而不是向运行它的可执行文件添加功能?

语境

我已经完成了一个 Java 库,它使用带有 JNI 的 C 库。C库在linux中编译成.so文件。这个库需要cap_net_raw 能力

目标

执行一个没有额外权限的java 进程,该进程使用所述 java 库。将使用该库的实际进程是产品中已经存在的进程,我们不想授予它们更多权限。

为了测试这一点,我创建了一个jar并在使用和不使用sudo. 正如预期的那样,使用它会成功,但如果没有它,它就会失败。

重现测试的步骤

  1. 创建一个带有本地方法的java类,我们来调用它SocketTester.java
static {
    System.loadLibrary("SocketTester");
}
private native int socketTest();
Run Code Online (Sandbox Code Playgroud)
  1. socketTester.h使用命令生成文件
javac -h . SocketTester.java
Run Code Online (Sandbox Code Playgroud)
  1. 创建socketTester.c实现socketTester.h并需要该cap_net_raw功能的文件
  2. 编译用
gcc -o libSocketTester.so socketTester.c -shared -I/usr/lib/jvm/java-14-openjdk-amd64/include -I/usr/lib/jvm/java-14-openjdk-amd64/include/linux
Run Code Online (Sandbox Code Playgroud)
  1. 移动libSocketTester.so到/usr/lib
  2. 跑步
sudo ldconfig
Run Code Online (Sandbox Code Playgroud)
  1. 设置上限
cd /usr/lib
sudo setcap cap_net_raw=epi libSocketTester.so
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个Test.java
public static void main(final String[] args) …
Run Code Online (Sandbox Code Playgroud)

java linux java-native-interface linux-capabilities

6
推荐指数
1
解决办法
832
查看次数