Hi,<br><br><br>I&#39;ve been trying to play with SockJS + Twisted. There&#39;s an implementation here: <a href="https://github.com/Fugiman/sockjs-twisted">https://github.com/Fugiman/sockjs-twisted</a><br><br>However, I&#39;m already running a web server, and as the README says sockjs-twisted is *not* intended to be run together with a web server. It doesn&#39;t really use any of the mechanics in twisted.web.<br>

<br>So, I tried to make it work using Resources anyway: reconstructing the equivalent bytes in render, and replaying them with the SockJSFactory:<br><br><div class="highlight"><pre><div class="line" id="LC1"><span class="k">class</span> <span class="nc">SockJSResource</span><span class="p">(</span><span class="n">resource</span><span class="o">.</span><span class="n">Resource</span><span class="p">):</span></div>

<div class="line" id="LC2">    <span class="sd">&quot;&quot;&quot;</span></div><div class="line" id="LC3"><span class="sd">    A resource that defers to a SockJS factory.</span></div><div class="line" id="LC4"><span class="sd">    &quot;&quot;&quot;</span></div>

<div class="line" id="LC5">    <span class="n">isLeaf</span> <span class="o">=</span> <span class="bp">True</span></div><div class="line" id="LC6"><br></div><div class="line" id="LC7">    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">factory</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>

<div class="line" id="LC8">        <span class="bp">self</span><span class="o">.</span><span class="n">_factory</span> <span class="o">=</span> <span class="n">SockJSFactory</span><span class="p">(</span><span class="n">factory</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span></div>

<div class="line" id="LC9"><br></div><div class="line" id="LC10"><br></div><div class="line" id="LC11">    <span class="k">def</span> <span class="nf">render</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span></div>

<div class="line" id="LC12">        <span class="n">transport</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">transport</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">transport</span><span class="p">,</span> <span class="bp">None</span></div>

<div class="line" id="LC13">        <span class="n">protocol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_factory</span><span class="o">.</span><span class="n">buildProtocol</span><span class="p">(</span><span class="n">transport</span><span class="o">.</span><span class="n">getPeer</span><span class="p">())</span></div>

<div class="line" id="LC14">        <span class="n">protocol</span><span class="o">.</span><span class="n">makeConnection</span><span class="p">(</span><span class="n">transport</span><span class="p">)</span></div><div class="line" id="LC15">

<br></div><div class="line" id="LC16">        <span class="n">path</span> <span class="o">=</span> <span class="s">&quot;/&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&quot;&quot;</span><span class="p">]</span> <span class="o">+</span> <span class="n">request</span><span class="o">.</span><span class="n">postpath</span><span class="p">)</span></div>

<div class="line" id="LC17">        <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;{0} {1} HTTP/1.1&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="n">path</span><span class="p">)]</span></div>

<div class="line" id="LC18">        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">values</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">requestHeaders</span><span class="o">.</span><span class="n">getAllRawHeaders</span><span class="p">():</span></div>

<div class="line" id="LC19">            <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;{0}: {1}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)))</span></div>

<div class="line" id="LC20">        <span class="n">lines</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">read</span><span class="p">()]</span></div>

<div class="line" id="LC21"><br></div><div class="line" id="LC22">        <span class="n">data</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\r\n</span><span class="s">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span></div>

<div class="line" id="LC23">        <span class="n">protocol</span><span class="o">.</span><span class="n">dataReceived</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div><div class="line" id="LC24">

<br></div><div class="line" id="LC25">        <span class="k">return</span> <span class="n">server</span><span class="o">.</span><span class="n">NOT_DONE_YET</span></div></pre></div><br><br>This only kind of works. There&#39;s an external sockjs test suite (more like an acceptance test suite): <a href="https://github.com/sockjs/sockjs-protocol">https://github.com/sockjs/sockjs-protocol</a>, that has multiple failing tests. If anyone needs help running these, I&#39;ll gladly assist there.<br>

<br>In an attempt to begin debugging this, I&#39;ve found that basically none of the protocol methods get called on that protocol instance I make on the third line of render. This took me a while to figure out because dataReceived *was* being called -- except then I realized I&#39;m calling it myself in that render method :)<br>

<br>This leads me to believe I&#39;m essentially just screwing up transplanting this transport entirely. Is that the case?<br clear="all"><br>-- <br>cheers<div>lvh</div><br>