小编mit*_*emo的帖子

中断Java DataInputStream readFully()

我有一个Java applet,它从服务器流式传输视频(MJPEG).我用C#(Windows服务)编写了一个代理服务器,放在applet和多个视频服务器之间.HTML/CSS/Js前端与Java applet一起使用.所有功能都可以正常工作(最后!!!),除了一件事.

视频服务器允许您通过REST界面播放录制的视频.剪辑完成后,服务器将打开连接,以防您想要发送倒带或搜索等命令.该剪辑在小程序中正常播放,直到结束.如果您尝试启动一个新剪辑(需要从Javscript向applet发送命令),浏览器会冻结.但是,后续使用相同连接的命令会起作用,例如播放,暂停和搜索.如果我停止Windows服务,浏览器将再次响应.

这就是我假设正在发生的事情:剪辑结束(或暂停); 不再发送数据但连接仍处于活动状态.applet正在等待下一帧的代理,但是代理正在视频服务器上等待下一帧,这不会再发送任何数据.

这是读取每个帧的while循环中的代码

byte[] img = new byte[mContentLength];
inputStream.skipBytes(headerLen);
inputStream.readFully(img);
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式中断此代码.

当在HTML前端中选择新的视频片段时,我们通知applet,它在CameraStream类上调用disconnect().这就是这个功能:

// DataInputStream inputStream
// HttpURLConnection conn
public void disconnect() {
    System.out.println("disconnect called.");
    if(running) {
        running = false;
        try {
            // close the socket
            if(inputStream != null) {
                inputStream.close();
            }
            if(conn != null) {
                conn.disconnect();
            }
            inputStream = null;
            System.out.println("closed.");
        } catch(Exception ignored) {
            System.out.println("exc:" + ignored.getMessage());
            main.reportErrorFromThrowable(ignored);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了测试这个,我让一个快速剪辑播放并运行到最后.然后我选择一个新剪辑.在我的Java控制台中,我得到了输出,disconnect called.但是我没有收到后续closed.消息,也没有抓到那个通用的异常.当我停止Windows服务时,我终于得到了closed.消息,所以它似乎inputStream.close();是阻塞.

所以我想我的问题是如何阻止阻止?是readFully(img) …

java blocking datainputstream

9
推荐指数
1
解决办法
2642
查看次数

使用cakePHP的Hash类从数组中提取数据

我有这样一个数组:

Array(
    [Rating] => Array(
        [0] => Array(
            [id] => 4
            [rating] => -1
        ),
        [1] => Array(
            [id] => 14
            [rating] => 9.7
        ),
        [2] => Array(
            [id] => 26
            [rating] => 9.55
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

我需要从这个数组中提取所有的等级> = 0,并且只需要数字.我做得很好Set::extract('/Rating/rating[rating>-1]', $video)

但后来我了解到这已被弃用,你现在应该使用Hash类.所以我查了一下新语法并写道:

Hash::extract($video, 'Rating.{n}.rating[rating>-1]');
Run Code Online (Sandbox Code Playgroud)

这给了我正确的结果,但它给出了一个恼人的警告: Warning (4096): Argument 1 passed to Hash::_matches() must be an array, string given, called in E:\www\lib\Cake\Utility\Hash.php on line 131 and defined [CORE\Cake\Utility\Hash.php, line 170]

当我没有条件(但[rating>-1])时,警告不会发生,但当然包括-1,我不想要.我在这做错了什么?我是否以某种方式滥用了这个功能?我应该只使用已弃用的Set类吗?或者我应该忽略警告,因为一旦我将此应用程序置于生产模式,它就不会显示出来?

cakephp-2.0

8
推荐指数
1
解决办法
1万
查看次数

使用长时间间隔的javascript setInerval有什么缺点吗?

我正在编写一个Web应用程序(HTML/CSS/JS前端,C#后端),期望用户在同一页面上停留一段时间(通常超过10分钟).我想定期检查服务器以查看用户的会话是否已过期.使用setInterval,间隔为2到5分钟,向服务器发出AJAX请求是否有任何不利之处?

javascript setinterval

2
推荐指数
2
解决办法
2601
查看次数