如果没有在dojo.connect期间返回的"句柄",如何删除dojo连接事件?
我的例子涉及动态地将一组事件分配给一组对象.(为简单起见,事件是onclick和ondblclick,对象是表中的行)
因此,在页面设置期间,事件连接到每一行(onclick,ondblclick).现在,根据用户的期望/动作,需要从一行中删除一个事件.但原来的手柄已不再可用.因此,以下内容不起作用: dojo.disconnect(row, "onclick", ??*).如何在不破坏原始行结构的情况下解决这个问题?
任何帮助当然非常感谢.
我需要让MySQL服务器在客户端断开连接后立即回滚事务,因为每个客户端同时工作.问题可以像这些一样重复(使用innodb表类型)
在客户端A上:
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server
Run Code Online (Sandbox Code Playgroud)
在客户B上:
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here
Run Code Online (Sandbox Code Playgroud)
我设置了MySQL的服务器选项,innodb_rollback_on_timeout并mysql --skip-reconnect在两个客户端上使用mysql的客户端.我在网络上尝试使用一台服务器和两台客户端.我在SELECT ... FOR UPDATE;线路后物理断开网络(拔掉电缆).我需要让其他客户端能够立即使用tblone事务(锁定它,更新它),并且为了实现这一点,我认为服务器应该在客户端A断开连接之后回滚客户端A的事务.
假设以下场景:
在这种情况下,我们遇到以下情况: - 客户端不知道他的数据是否有效并且插入正确 - Web服务器(rails 3.2应用程序)没有显示任何异常,无论它是否在apache代理后面
我找不到如何在HTTP文档中处理这种情况.我的问题是:
a)客户应该期望他的数据可以处理吗?(然后尝试例如GET请求来检查数据是否已经提交)
b)如果不是(a) - 应该服务器检测到它吗?是否有可能在铁轨中做到这一点?在这种情况下,可以改变变化.在这种情况下,我希望从铁路应用中得到一些预期,但没有......
我有一个客户端 - 服务器系统,双方都是我编写的,当服务器断开/死机时我想让客户端处于"离线"状态,然后当服务器再次可用时自动将它们"恢复"为"在线"状态.
对于第一部分,我通过将客户端设置为脱机来监听通道故障事件并进行处理.然后我开始在服务器上调用"ping"服务(每30秒),如果它还活着,它就会返回一个bool.一旦它活着,客户端就会获得bool并重新上线.
这一切都有效,我遇到的问题是,当客户端调用ping服务并且服务器关闭时,没有响应(显然),最终,大约2分钟后,我得到一个端点未找到异常.到这个时候,我已经尝试了3-4次ping,因此有3-4个异常酿造.
我的问题是,如何更优雅地处理ping服务?理想情况下,我想定期拨打一个服务,让我知道它是否在线,并立即让我知道它是否在线.
我正在尝试使用BroadcastReceiver来检测手机何时从WiFi接入点断开连接.为此,我在清单中注册了我的BroadcastReceiver:
<receiver android:name="com.eshayne.android.WiFiBroadcastReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在我的WiFiBroadcastReceiver类中,我正在检查NETWORK_STATE_CHANGED_ACTION操作并查看NetworkInfo的详细状态:
if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
android.util.Log.d("com.eshayne.android.WiFiBroadcastReceiver", "network state change - detailedState=" + info.getDetailedState() + ": " + info.toString());
if (info.getDetailedState() == DetailedState.DISCONNECTED) {
...
}
else if (info.getDetailedState() == DetailedState.CONNECTED) {
...
}
Run Code Online (Sandbox Code Playgroud)
我看到的问题是,当手机离开WiFi接入点的范围时,我的"断开连接"回叫会在停止前被调用6次 - 大约每15秒一次.到目前为止,我还没有找到每个回调的NetworkInfo之间的任何区别特征.写入日志的每个NetworkInfo对象如下所示:
02-18 10:16:51.918 D/com.eshayne.android.WiFiBroadcastReceiver( 1511): network state change - detailedState=DISCONNECTED: NetworkInfo: type: WIFI[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Run Code Online (Sandbox Code Playgroud)
这也不是电话在WiFi范围内进出的问题,因为在"断开连接"的回调之间没有调用我的"连接"回调.任何其他国家也不会在其间被触发.只是一系列快速的6个回调,每个回调都有详细的DISCONNECTED状态.
有没有更好的方法来检测手机何时丢失了WiFi连接,以便每次断开连接只调用一次我的回叫?或者以任何方式检测我看到的6个回调中的哪一个是"最终"回调?
当有人连接到节点服务器时,我保留一个包含所有套接字的数组.这样我就可以在需要时向所有人广播消息,或者循环通过用户来计算在线用户的数量等.
所有这一切都很好,但是当一个on disconnect事件被触发时,我的参数中没有收到套接字.还有另一种方法可以知道哪个套接字刚断开连接?
var allClients = [];
io.sockets.on('connection', function(socket) {
allClients.push(socket);
socket.on('disconnect', function(socket) {
console.log('Got disconnect!');
var i = allClients.indexOf(socket);
delete allClients[i];
});
});
Run Code Online (Sandbox Code Playgroud)
当然上面的例子不起作用,因为disconnect事件不会给出socket参数(或任何其他参数).那么还有另一个事件在断开连接之前触发了套接字仍在那里吗?
阿里
我有两个简单的应用程序:
等待特定tcp端口以供客户端连接的服务器应用程序.然后听他说的话,发回一些反馈并断开那个客户端.
一个表单应用程序连接到服务器应用程序,然后说出一些内容,然后等待反馈并断开与服务器的连接,然后在表单中显示反馈.
虽然服务器应用程序似乎行为正常(我已经使用Telnet对其进行了测试,并且我看到反馈并且我看到反馈后直接发生了断开连接),但表单应用程序似乎并未发现与服务器的断开连接.(即使在服务器断开连接后,TcpClient.Connected似乎也保持正常)
我的问题是:为什么TcpClient.Connected保持正确,我怎么知道服务器是否/何时断开连接?
这是我的完整代码:
表格申请:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace Sender
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void sendButton_Click(object sender, EventArgs e)
{
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(IPAddress.Parse("127.0.0.1"), 81);
responseLabel.Text = "waiting for response...";
responseLabel.Invalidate();
// write request
NetworkStream networkStream = tcpClient.GetStream();
byte[] buffer = (new ASCIIEncoding()).GetBytes("Hello World! ");
networkStream.Write(buffer, 0, buffer.Length);
networkStream.Flush();
// read response
Thread readThread = …Run Code Online (Sandbox Code Playgroud) 现在我与weblogic JMS服务器断开连接看起来像这样
import java.util.Hashtable;
import javax.jms.*;
import javax.naming.*;
import javax.transaction.*;
import java.util.Vector;
import javax.rmi.PortableRemoteObject;
import clojure.java.api.Clojure;
import clojure.lang.IFn;
import org.apache.log4j.Logger;
import weblogic.jndi.*;
public class WebLogicListener implements MessageListener, ExceptionListener{
public InitialContext ctx;
public TopicConnectionFactory conFactory;
public TopicConnection tCon;
public TopicSession tSession;
public TopicSubscriber tSub;
public Boolean development;
public Topic topic;
/*clojure function objects*/
public IFn publish;
public IFn close;
public IFn incrementMetric;
public IFn logMessage;
public IFn resync;
public Object channel;
public ExceptionListener exception;
public String topicName;
public String subName;
public …Run Code Online (Sandbox Code Playgroud) 我正在学习命名管道,并且正在使用来自MSDN doc的命名管道客户端和服务器示例:
我修改了客户端,因此我可以在控制台中键入消息并将它们发送到显示消息的服务器并发回回复.本质上我添加了一个循环,它在SetNamedPipeHandleState()调用之后开始并在CloseHandle()调用之前结束(即在循环外发生打开和关闭,所以我在循环中使用相同的管道句柄).
我的问题是,如果我杀了客户端(通过关闭它或通过任务管理器结束它)是否有任何方法让服务器端检测断开连接?
我尝试使用GetNamedPipeHandleState()希望它返回失败,并且对GetLastError()的调用将返回ERROR_PIPE_NOT_CONNECTED,但事实并非如此.由于设置此服务器的方式,我必须在CompletedReadRoutine函数中执行此操作并创建"受控"故障.我做的是,在服务器的CompletedReadRoutine上有一个断点:
对GetNamedPipeHandleState()的调用成功返回,因此我从未进行过GetLastError()调用.当它到达WriteFileEx调用时它失败并且在那时对GetLastError的调用返回ERROR_NO_DATA.
看管道功能,我看不到任何可能有用的东西.我遗漏了一些东西,或者客户端断开连接只是检测不到.
我能想到的另一件事是收集连接客户端的pid(通过GetNamedPipeClientProcessId)并关闭看门狗线程以检查它们是否仍然存活.虽然,只是考虑这样做会引发我的蜘蛛般的感觉.
有没有办法在使用命名管道时检测断开连接的客户端?
在我的Datasnap客户端应用程序中,我使用1个TSQLConnection作为我的方法和ProviderConnection.连接丢失时出现问题.TSQLConnection.Connected和TSQLConnection.ConnectionState都没有捕获到它.
当我的TSQL连接打开但我丢失了互联网连接,或者服务器停止.Datasnap客户端应用程序提供了大量错误.(服务器方法或ClientDatasets)
我已经创建了一个函数来管理我的服务器方法的SQL连接.但是当例如关闭通过TDSProviderConnection连接的ClientDataset时会出现更多问题.
问:如何管理客户端应用程序以安全地捕获TSQL连接上的任何断开连接. 问:如何管理停机时间,以及如何处理未保存的客户端状态.
停机后重新连接不是问题.
调用servermethod时:这会抛出异常.
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
Run Code Online (Sandbox Code Playgroud)
所以我写下一个方法,用虚方法从我的数据模块中获取TSQLCONNECTION.
function TDMForm.DSConnection: TSQLConnection;
var
tmpM:TServerMethodsClient;
begin
result:=nil;
if assigned(MYTSQLCONNECTION) then begin
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
try
try
tmpM.Ping;
result:=MYTSQLCONNECTION
except
ReconnectForm.ShowModal; // has a reconnect button that tries to reconnect + shutdownbutton
if ReconnectForm.modalresult=mrOK then
result:=MYTSQLCONNECTION
else
MainForm.Close;
end;
finally
tmpm.Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我用这种方式写了这个方法,因为只有找出连接是否丢失的方法是通过伪方法,它会抛出相同的错误...然后我可以查询重新连接或关闭程序.
编辑:(我期待某种一般的答案和指导方针,做和不做.不是我的代码的更正,这只是为了表明我现在在做什么.)
disconnect ×10
c# ×2
timeout ×2
.net ×1
android ×1
apache ×1
connection ×1
datasnap ×1
delphi ×1
delphi-xe2 ×1
dojo ×1
http ×1
java ×1
mysql ×1
named-pipes ×1
node.js ×1
rollback ×1
socket.io ×1
tcp ×1
tcpclient ×1
transactions ×1
wcf ×1
weblogic ×1
wifi ×1
winapi ×1