1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE> [99s-extend] timeout in cowboy loop handler
</TITLE>
<LINK REL="Index" HREF="index.html" >
<LINK REL="made" HREF="mailto:extend%40lists.ninenines.eu?Subject=Re%3A%20%5B99s-extend%5D%20timeout%20in%20cowboy%20loop%20handler&In-Reply-To=%3C525E179F.2010200%40ninenines.eu%3E">
<META NAME="robots" CONTENT="index,nofollow">
<style type="text/css">
pre {
white-space: pre-wrap; /* css-2.1, curent FF, Opera, Safari */
}
</style>
<META http-equiv="Content-Type" content="text/html; charset=us-ascii">
<LINK REL="Previous" HREF="000277.html">
<LINK REL="Next" HREF="000279.html">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H1>[99s-extend] timeout in cowboy loop handler</H1>
<B>Loïc Hoguin</B>
<A HREF="mailto:extend%40lists.ninenines.eu?Subject=Re%3A%20%5B99s-extend%5D%20timeout%20in%20cowboy%20loop%20handler&In-Reply-To=%3C525E179F.2010200%40ninenines.eu%3E"
TITLE="[99s-extend] timeout in cowboy loop handler">essen at ninenines.eu
</A><BR>
<I>Wed Oct 16 06:35:43 CEST 2013</I>
<P><UL>
<LI>Previous message: <A HREF="000277.html">[99s-extend] timeout in cowboy loop handler
</A></li>
<LI>Next message: <A HREF="000279.html">[99s-extend] timeout in cowboy loop handler
</A></li>
<LI> <B>Messages sorted by:</B>
<a href="date.html#278">[ date ]</a>
<a href="thread.html#278">[ thread ]</a>
<a href="subject.html#278">[ subject ]</a>
<a href="author.html#278">[ author ]</a>
</LI>
</UL>
<HR>
<!--beginarticle-->
<PRE>Loop handlers are designed to wait for a long time with the socket
*idle* and then eventually send one response then close the socket.
Things like long-polling.
What you are doing is just streaming, for which you do not need a
timeout because the socket isn't idle. You are just sending a large
response, and normal handlers are perfectly capable of doing that.
On 10/16/2013 06:12 AM, akonsu wrote:
><i> thanks. one more question if you do not mind. you say that we need
</I>><i> timeouts when the client does not notify us when it dies. but then you
</I>><i> say that if the client dies then the socket write will fail. to me this
</I>><i> sounds like a contradiction. would you please clarify?
</I>><i>
</I>><i> (I assume that this is the problem that we are discussing:
</I>><i> <A HREF="http://stackoverflow.com/questions/283375/detecting-tcp-client-disconnect,">http://stackoverflow.com/questions/283375/detecting-tcp-client-disconnect,</A>
</I>><i> right?)
</I>><i>
</I>><i>
</I>><i> 2013/10/16 Loïc Hoguin <<A HREF="https://lists.ninenines.eu/listinfo/extend">essen at ninenines.eu</A> <mailto:<A HREF="https://lists.ninenines.eu/listinfo/extend">essen at ninenines.eu</A>>>
</I>><i>
</I>><i> On 10/16/2013 05:48 AM, akonsu wrote:
</I>><i>
</I>><i> 1. do you mean that there is no way on the server side to tell
</I>><i> if the
</I>><i> client has disconnected?
</I>><i>
</I>><i>
</I>><i> There are ways, and Cowboy will happily detect them. There's also
</I>><i> the problem that a side may be closed without the other side knowing
</I>><i> about it, which is why you need timeouts.
</I>><i>
</I>><i>
</I>><i> 2. if I use a normal handler, I will still run into the same
</I>><i> problem, it
</I>><i> does not matter which handler I use, from the standpoint of deciding
</I>><i> whether the client is still there, right?
</I>><i>
</I>><i>
</I>><i> If the client is gone, the send will fail. Normal handlers are
</I>><i> pretty much the same except they don't have a timeout, because your
</I>><i> code has an explicit end.
</I>><i>
</I>><i> I am confused as to how I can implement my streaming and not
</I>><i> drop the
</I>><i> connection on each client and yet make sure I do close the
</I>><i> connections
</I>><i> when the clients disconnect...
</I>><i>
</I>><i>
</I>><i> 2013/10/15 Loïc Hoguin <<A HREF="https://lists.ninenines.eu/listinfo/extend">essen at ninenines.eu</A>
</I>><i> <mailto:<A HREF="https://lists.ninenines.eu/listinfo/extend">essen at ninenines.eu</A>> <mailto:<A HREF="https://lists.ninenines.eu/listinfo/extend">essen at ninenines.eu</A>
</I>><i> <mailto:<A HREF="https://lists.ninenines.eu/listinfo/extend">essen at ninenines.eu</A>>>>
</I>><i>
</I>><i>
</I>><i> Infinite is bad practice, yes. Infinite means some
</I>><i> connections will
</I>><i> *never* be closed, eating FDs and memory for nothing.
</I>><i>
</I>><i> I'm not sure why you want to receive messages, you could
</I>><i> just use a
</I>><i> normal handler that asks for more data, sends it, ask for
</I>><i> more data,
</I>><i> sends it, etc.
</I>><i>
</I>><i>
</I>><i>
</I>><i> --
</I>><i> Loïc Hoguin
</I>><i> Erlang Cowboy
</I>><i> Nine Nines
</I>><i> <A HREF="http://ninenines.eu">http://ninenines.eu</A>
</I>><i>
</I>><i>
</I>
--
Loïc Hoguin
Erlang Cowboy
Nine Nines
<A HREF="http://ninenines.eu">http://ninenines.eu</A>
</PRE>
<!--endarticle-->
<HR>
<P><UL>
<!--threads-->
<LI>Previous message: <A HREF="000277.html">[99s-extend] timeout in cowboy loop handler
</A></li>
<LI>Next message: <A HREF="000279.html">[99s-extend] timeout in cowboy loop handler
</A></li>
<LI> <B>Messages sorted by:</B>
<a href="date.html#278">[ date ]</a>
<a href="thread.html#278">[ thread ]</a>
<a href="subject.html#278">[ subject ]</a>
<a href="author.html#278">[ author ]</a>
</LI>
</UL>
<hr>
<a href="https://lists.ninenines.eu/listinfo/extend">More information about the Extend
mailing list</a><br>
</body></html>
|