我使用了" 不会阻止页面下载的更好的Google AnalyticsJavaScript "来动态加载Google Analytics,因此它不会阻止HTML /页面呈现.
但是,有时候我的HTML页面会阻止Firefox 3.0(WinXP)状态消息的呈现状态:
" 从www.google-analytics.com传输数据 "
有关如何以不会阻止HTML /页面呈现的方式加载Google AnalyticsJava的任何想法?
这是我在提到实时处理语言时一次又一次看到的术语.在这种特殊情况下,我正在阅读node.js主页,它有这样的引用:
"在其他系统中,始终存在阻塞调用以启动事件循环."
什么是拦截电话?
在Java中实现阻塞函数调用的推荐/最佳方法是什么,以后可以通过另一个线程的调用解除阻塞?
基本上我想在一个对象上有两个方法,第一个调用阻塞任何调用线程,直到第二个方法由另一个线程运行:
public class Blocker {
/* Any thread that calls this function will get blocked */
public static SomeResultObject blockingCall() {
// ...
}
/* when this function is called all blocked threads will continue */
public void unblockAll() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
意图BTW不仅仅是为了获得阻塞行为,而是编写一种方法,在可以计算所需结果的某个未来点之前阻塞.
我有一个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) …
我试图confirm()在Javascript中覆盖标准方法(制作一个漂亮的UI和东西).我已经阅读了100篇"无法完成"的帖子,但我不想放弃,直到我给它一个公平的镜头.:)
所以,真正的问题当然是该confirm()方法必须阻止所有javascript执行,直到用户选择一个选项.那么,Javascript中有哪些阻塞行为的方法呢?我已经能够拿出5:
alert() - 不适合我,因为它显示了自己不需要的UI;confirm()- 同样的问题alert();XmlHttpRequest 在同步模式 - 排序,但它涉及服务器......showModalDialog() - 很好,但我需要一个特定的设计,还有一些浏览器兼容性要求......到目前为止,我最好的方法是创建一个<iframe>带有提示符(然后获取自己的javascript执行线程)并阻止,XmlHttpRequest直到用户选择了一个选项<iframe>.不幸的是,这涉及在服务器之间反复传递结果,我想让这个100%客户端.此外,它在打开对话框时占用服务器线程,并且可能存在一些适用于浏览器的特定ajax超时.
任何人都可以想到阻止执行的任何其他Javascript方法,这些方法可能(ab)用于实现所需的效果吗?
我有多个客户端尝试连接到服务器发送的事件流/stream.这适用于单个客户端,但尝试连接任何其他客户端会导致新客户端无限期地阻塞等待数据.如果我发送更多数据,它只会发送给第一个客户端,而不会发送给其他客户端.
这是一个小片段,说明了我的问题:
import flask
import time
app = flask.Flask(__name__)
def event_stream():
for i in xrange(9999):
yield "data: %d\n\n" % i
time.sleep(1)
@app.route("/stream", methods=[ "GET" ])
def stream():
return flask.Response(
event_stream(),
mimetype="text/event-stream"
)
Run Code Online (Sandbox Code Playgroud)
然后我运行它gunicorn --worker-class=gevent -w 4 -t 99999 app:app.它适用于单个客户端,但任何其他客户端在发布时都会被阻止GET /stream.
阻止的原因是什么,我该如何解决?
我调试了一点,得到了一些奇怪的结果.如果我执行此过程,则会发生以下情况:
我一直在努力学习C#与HttpClient的异步,并遇到了一个我无法弄清楚发生了什么的问题.
我想做的事:
问题:
每当我一起发送请求列表时,响应似乎要花费更长的时间,但它们应该大致相同.例如:
所用时间:67.9609毫秒所用
时间:89.2413毫秒所用
时间:100.2345毫秒所用
时间:117.7308毫秒所用
时间:127.6843毫秒所用
时间:132.3066毫秒所用
时间:157.3057毫秒
什么时候它们都应该只有70毫米左右...这对于每一批新产品都会重复; 第一个是快速的,然后每个连续的减速.
我的代码
有3个主要部分.我已经简化了它,我可以专注于问题发生的地方(Downloader.cs是我的时间)
Downloader.cs这包含执行实际http查询的方法:
public async Task<string> DownloadData(string requestString)
{
HttpResponseMessage response;
response = await this.httpClient.PostAsync( url, new StringContent( requestString ));
string returnString = await response.Content.ReadAsStringAsync();
return returnString;
}
Run Code Online (Sandbox Code Playgroud)QueryAgent.cs这初始化一个新的Downloader并包含主异步循环调用函数和它在循环中调用的异步方法.
我需要尽快发送新的请求,具体取决于最后一组响应的结果(基本上,请求发出的速率可能会发生变化,所以我不能在结束时执行Task.delay() while循环)
public async Task DownloadLoopAsync()
{
while ( this.isLooping )
{
// I put this here to stop it using lots of cpu.
// Not sure if it is best …Run Code Online (Sandbox Code Playgroud)因为Rust没有内置的以非阻塞方式从文件读取的能力,所以我必须生成一个读取文件的线程/dev/input/fs0以获取操纵杆事件.假设操纵杆未使用(无需读取),因此在从文件读取时阻止读取线程.
有没有办法让主线程强制读取线程的阻塞读取恢复,所以读取线程可以干净地退出?
在其他语言中,我只需在主线程中关闭该文件.这将强制阻止读取恢复.但我还没有找到在Rust中这样做的方法,因为阅读需要对文件进行可变引用.
首先,我认为第一次只是更清楚地看到阻塞的条件.对于下一次,它会以某种方式稍微阻止UI,但不会像不使用异步时那样明显.
我可以这么说,因为我可以看到使用它QueryAsync和一个简单的包装代码之间的区别,Task.Run(() => connection.Query<T>)它的工作正常,当然比QueryAsync(在UX中)要好得多.
代码很简单,就像这样:
public async Task<IEnumerable<Item>> LoadItemsAsync(){
using(var con = new OracleConnection(connectionString)){
var items = await con.QueryAsync<dynamic>("someQuery");
return items.Select(e => new Item { ... });
}
}
//in UI thread, load items like this:
var items = await LoadItemsAsync();
Run Code Online (Sandbox Code Playgroud)
代码工作正常(没有阻止UI)是这样的:
public async Task<IEnumerable<Item>> LoadItemsAsync(){
using(var con = new OracleConnection(connectionString)){
var items = await Task.Run(() => con.Query<dynamic>("someQuery"));
return items.Select(e => new Item { ... });
}
}
//in UI …Run Code Online (Sandbox Code Playgroud) 我想用服务器和客户端写一个gomoku游戏,终端版本运行良好,但pygame版本刚刚被阻止,无法兑换任何东西
这是游戏执行功能
首先,它启动套接字连接
self._running = True在init,从服务器获取包就像{"grid":GRID(strings with 0 and 1), "x":X, "y":Y, "player":LAST_PLAYER, "next_player":CURRENT_PLAYER, "gameover":IS_GAMEOVER}
在循环中:
on_event并让用户移动(我怀疑这一步是错误的,所以解析包步骤阻止了主线程?但是我应该怎么解决这个问题)然后将新的移动包发送到服务器这就像循环一样
while self._running:
data = self.client_thread.reply_q.get(True)
if data:
self.last_player = data["player"]
self.grid = self.grid_str_2_matrix(data["grid"])
self.lastPosition = [data["x"], data["y"]]
self.gomoku_board_init()
if data["gameover"] == -1:
if data["next_player"] != self.player:
self.client_thread.cmd_q.put(ClientCommand(ClientCommand.SEND, {"wait": True}))
print("waiting")
else:
for event in pygame.event.get():
self.on_event(event)
print("new move")
else:
print("game over")
self._running = False
if data["gameover"] == 0:
self.winner = 0 …Run Code Online (Sandbox Code Playgroud) blocking ×10
asynchronous ×3
c# ×2
java ×2
javascript ×2
python ×2
async-await ×1
concurrency ×1
dapper ×1
flask ×1
html ×1
node.js ×1
pygame ×1
real-time ×1
rendering ×1
resume ×1
rust ×1
sockets ×1
synchronous ×1
task ×1
terminology ×1